1. Patrones de Diseño
Un Ejemplo Ilustrado
(Arquitectura de Software para Practicantes)
Universidad de los Andes
Demián Gutierrez
Marzo 2013
1
2. Patrones de Diseño en Acción
Versión 1: Las caras felices son imágenes
¡Bienvenidos a “Carita-Feliz-Landia”!
...donde todas las caritas son felices...
(ejem, bueno, casi todas) 2
3. Patrones de Diseño en Acción
Versión 1: Las caras felices son imágenes
¿cuál es la responsabilidad de cada clase? 3
4. Ejemplo: Patrones de Diseño en Acción
(Singleton / Factory)
¡sólo puede haber uno! 4
5. Ejemplo: Patrones de Diseño en Acción
(Command)
El modelo sólo se modifica por medio de un comando 5
6. Ejemplo: Patrones de Diseño en Acción
(Decorator)
O bien, cómo ponerle un marco a una ventana 6
7. Ejemplo: Patrones de Diseño en Acción
(Flyweight / Factory)
Compartiendo Objetos Inmutables
¿Excel? 7
8. Ejemplo: Patrones de Diseño en Acción
(Factory)
Escondido
¿Cómo construir caras... sin borde? 8
9. Ejemplo: Patrones de Diseño en Acción
(Builder)
Ahora que sabemos
cómo construir
bordes y caras
¿cómo podemos
combinar ambas cosas?
¿Cómo construir objetos complejos de forma fácil?
9
11. Patrones de Diseño en Acción
Versión 2: Caras felices con gráficos vectoriales
“Carita-Feliz-Landia” se vuelve “Vectorial”
11
12. Patrones de Diseño en Acción
Versión 2: Caras felices con gráficos vectoriales
Ojo
(Eye) Cara
(DrawnFace)
Círculo
(Circle)
Círculo
(Circle)
Sonrisa
(Smile)
Círculo
(Circle)
“Carita-Feliz-Landia” se vuelve “Vectorial”
12
13. Ejemplo: Patrones de Diseño en Acción
(Factory)
El Cliente no
nota el
cambio
Escondido
¿Cómo queda el Factory ahora? 13
14. Ejemplo: Patrones de Diseño en Acción
(Composite)
¿Cómo dividir la complejidad a lo largo de
un grupo de objetos compuestos? 14
15. Ejemplo: Patrones de Diseño en Acción
(Composite)
En realidad es un poquito más complejo
¿A alguien se le ocurre un refactor? 15
17. Resumen
Singleton (119 / --69---)
Composite (151 / --85--)
Factory (99 / --59--)
Command (215 / --117--)
Facade (171 / --95--)
Decorator (161 / --90--)
Flyweight (179 / --99--)
Builder (89 / --54--)
Las páginas son referencias a la
versión en español del libro de Patrones de Diseño de GoF
17
18. Resumen
Hay que pensar menos en el “código menudo”
(if, else, while, for, etcétera)
Y más en términos de:
Estructura:
¿Cómo organizar el código y distribuir
responsabilidades a lo largo de distintas clases?
Patrones de Diseño:
¿Qué patrones me pueden ayudar a
estructurar el código adecuadamente? 18