Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Modulo 3 Tema 1 2 3
Modulo 3 Tema 1 2 3
Por ejemplo, para dibujar una cara (el problema) mirando al frente (el contexto) se puede
aplicar un patrón al que podríamos llamar “Ovalo Particionado”. Es fundamental asignar un
nombre a un patrón de manera tal que sea posible nombrarlos durante el diseño del software
sin entrar en los detalles de la solución propuesta por el patrón.
¿Qué NO es un patrón de diseño?
Un patrón de diseño no es:
Un artefacto ejecutable como una librería o un framework.
Un algoritmo
Una solución completa a un problema. Es más bien una estrategia que describe los
componentes de una propuesta de solución y sus relaciones en términos generales.
Patrones de creación
Estos patrones están orientados a la creación de objetos y apuntan separar la creación de
objetos de manera tal que el cliente que los requiere no incluya los detalles de la creación de
objetos.
Abstract Factory
posted on 24/09/2015 by [email protected] | Leave your thoughts
Abstract Factory
Abstract Factory es un patrón de diseño que separa la creación de un objeto (o una familia de
objetos relacionados) del uso del objeto de manera tal que un cliente que requiera el objeto
solicita la creación del mismo a un Factory (factoría) sin tener que especificar la clase concreta
del objeto que requiere. La decisión del tipo del objeto a crear está encapsulada en el Factory.
Cuando un cliente requiere objeto de tipo “ ProductoA” (que es una interfaz), lo solicita a una
implementación de la factoría, por ejemplo “ Factoría Concreta 1”, que es la responsable de
proveer una instancia de una clase que implementa la interfaz “ProductoA”. Gracias a este
patrón de diseño, el nombre de la clase concreta que implementa la interfaz está
completamente encapsulado en la implementación de la factoría; el cliente, desconoce el
nombre de la clase concreta de la instancia que recibe de la factoría.
Este patrón es muy útil para mantener la inversión de dependencias entre los módulos que
contienen las abstracciones de alto nivel (reglas de negocios y/o casos de uso, por ejemplo) y
los módulo encargados de la construcción de las clases que implementan las abstracciones
definidas en los módulos más abstractos. En otras palabras, con éste patrón de diseño es
posible que un módulo solicite la creación de los objetos que requiere sin tener dependencias
de código fuente con dichos objetos.
Referencias
[1] Design Patterns: Elements of Reusable Object-Oriented Software
[2] Dependency Injection Inversion
[3] El patrón de diseño Singleton
Strategy
Con este patrón es posible definir una familia de algoritmos para resolver el mismo problema de
manera tal que se pueda seleccionar el algoritmo de acuerdo al contexto que requiere
emplearlo. Permite en definitiva, separar las variaciones de determinado comportamiento de
manera tal que el contexto más abstracto que las usa (StrategyClient) quede cerrado a los
cambios y nuevas implementaciones de dichos comportamientos.
Template Method
Define el esqueleto de una operación, delegando en las subclases algunos de sus pasos.
Permite que las subclases redefinan ciertos pasos de la operación sin cambiar la estructura
definida en un nivel de abstracción mayor.
Costos y Beneficios
Ambos patrones abordan el mismo problema de diseño: aislar las variaciones en el
comportamiento de ciertos aspectos de una tarea. Strategy emplea composición y herencia,
Template Method emplea herencia. En ambos casos el polimorfismo juega un papel central en
el diseño y reemplaza la utilización de estructuras condicionales.
Con Strategy se deben crear al menos dos objetos: el contexto (o cliente) y la estrategia.
Template Method demanda la creación de una instancia. Debido a que en Strategy el cliente y
la estrategia están separados, es posible cambiar la estrategia en tiempo de ejecución; con
Template Method, no. Incluso es posible que el cliente y las estrategias estén en proyectos o
módulos desarrollados y desplegados de manera independiente.
Referencias
[1] Design Patterns: Elements of Reusable Object-Oriented Software
Posted in Desarrollo de Software