Saltar al contenido
Personaje de Palentinoinfograph/ palentino.es
INFOGRAPHVolver a la colección
programación · GIF animado1.024 × 1.536 pxNuevo

🧩 PATRONES DE DISEÑO: seis soluciones para entender mejor cómo organizar tu código

100 %
LECTURA NÍTIDAAbrir GIF original ↗1024 × 1536 px · el aumento no añade detalle al archivo
🧩 PATRONES DE DISEÑO: seis soluciones para entender mejor cómo organizar tu código
Auto adapta la lectura · + − zoom · 0 ver completa · Esc salirVista normal

PARA ENTENDER EL ESQUEMA

Sobre esta infografía

Cuando desarrollamos software, algunos problemas se repiten: crear objetos con distintas variantes, conectar sistemas incompatibles, añadir funciones o comunicar cambios.

Los patrones de diseño recogen formas conocidas de resolver esos problemas. Nos proporcionan un vocabulario común y una estructura que podemos adaptar al contexto.

En esta infografía explico seis patrones con ejemplos en C#, agrupados en tres familias. 👇

🟣 CREACIONALES: ¿cómo creamos los objetos?

1️⃣ FACTORY METHOD — Delegar la creación

Una clase base define una operación de creación y las subclases deciden qué producto concreto devolver.

📦 En el ejemplo, Logistica declara Crear() y LogisticaPostal devuelve un EnvioPostal.

El código que utiliza esa creación puede trabajar con el contrato IEnvio.

💡 Encaja cuando una jerarquía necesita especializar el tipo de objeto que crea.

2️⃣ BUILDER — Construir paso a paso

Permite separar los pasos de construcción de la representación final de un objeto.

📦 PedidoBuilder configura el cliente, marca el pedido como urgente y finalmente lo construye:

new PedidoBuilder().Para("Ana").Urgente().Build();

💡 Resulta útil cuando la construcción incluye varias opciones o etapas. El encadenamiento de métodos facilita la lectura, pero por sí solo no define el patrón.

🩵 ESTRUCTURALES: ¿cómo combinamos los objetos?

3️⃣ ADAPTER — Hacer compatibles dos interfaces

Traduce el contrato que espera nuestra aplicación al que ofrece un componente existente.

🔌 La aplicación llama a Pagar(), mientras PagoAdapter delega en Cobrar() de una pasarela antigua.

💡 Permite integrar ese servicio sin modificar su implementación.

4️⃣ DECORATOR — Añadir comportamiento

Envuelve un objeto, conserva su contrato y añade funciones antes o después de delegar en él.

✉️ ConRegistro recibe un IAviso, registra la operación y llama al aviso original:

new ConRegistro(new Email()).Enviar();

💡 Podemos incorporar responsabilidades combinando objetos, sin crear una subclase para cada combinación.

🟠 DE COMPORTAMIENTO: ¿cómo colaboran los objetos?

5️⃣ STRATEGY — Intercambiar algoritmos

Encapsula distintas reglas detrás de un mismo contrato.

🏷️ SinDescuento mantiene el importe; DescuentoVip aplica una reducción del 10 %. Ambos implementan IDescuento.

💡 El cliente puede recibir la estrategia que necesita y utilizarla sin conocer sus detalles internos.

6️⃣ OBSERVER — Avisar de un cambio

Un emisor notifica un acontecimiento a sus suscriptores.

🔔 En el ejemplo, Tienda publica PedidoCreado. Los componentes suscritos pueden reaccionar cuando se confirma el pedido.

En C#, los eventos permiten aplicar esta idea.

💡 Conviene gestionar las suscripciones y recordar que estos eventos no implican ejecución asíncrona.

🎯 La decisión empieza por el problema:

• Crear variantes → Factory Method.
• Construir por pasos → Builder.
• Adaptar interfaces → Adapter.
• Añadir funciones → Decorator.
• Cambiar reglas → Strategy.
• Notificar cambios → Observer.

Un patrón aporta valor cuando hace que el código resulte más fácil de entender, modificar y mantener.

✍️ Oscar de la Cuesta
🌐 palentino.es

#PatronesDeDiseño #CSharp #Programación #DesarrolloDeSoftware #ArquitecturaDeSoftware

0 visitas
Valora este esquema—/5 · 0 votos
Pulsa una estrella para votar

Puedes cambiar tu elección desde el pie de cualquier página. Las opciones adicionales empiezan desactivadas.