PATRONES DE DISEÑO

I N T E G RA N T E S :
• H U A M Á N F E R N Á N D E Z M AY RA
• E S P I N O Z A S E R RA N O RA N DY

Patrones de diseño
Los patrones de diseño son la base para la búsqueda de
soluciones a problemas comunes en el desarrollo de
software y otros ámbitos referentes al diseño de interacción
o interfaces.
Un patrón de diseño resulta ser una solución a un problema
de diseño. Para que una solución sea considerada un patrón
debe poseer ciertas características. Una de ellas es que
debe haber comprobado su efectividad resolviendo
problemas similares en ocasiones anteriores. Otra es que
debe ser reutilizable, lo que significa que es aplicable a
diferentes problemas de diseño en distintas circunstancias.

Solución.Componentes de un patrón de diseño Para que una solución sea considerada un patrón debe poseer ciertos componentes fundamentales: Nombre del patrón. Consecuencias. Indica cuándo aplicar el patrón. . sino que un patrón es más bien como una plantilla que puede aplicarse en diversas situaciones diferentes. Muestra la verdadera esencia del problema. Resultados en términos de ventajas e inconvenientes. En algunas oportunidades el problema incluye una serie de condiciones que deben darse para aplicar el patrón. Permite describir en pocas palabras un problema de diseño junto con sus soluciones y consecuencias. Problema (o fuerzas no balanceadas). No describe una solución o implementación en concreto.

cuáles son sus responsabilidades y como se interrelacionan. Patrones de codificación o modismos (idioms). Patrones de diseño. . Describen una estructura recurrente y común de componentes comunicantes que resuelven un problema de diseño dentro de un contexto. o sus relaciones. Esquemas para refinar los subsistemas o componentes de un sistema de software. Centrados en la arquitectura del sistema. Definen una estructura fundamental sobre la organización del sistema. Patrones que ayudan a implementar aspectos particulares del diseño en un lenguaje de programación específico.Clasificación de un diseño de sistemas Patrones arquitectónicos. Proveen un conjunto predefinido de subsistemas.

tales como qué objeto crear. etc. cómo. •Simplicidad: Algunos patrones facilitan la creación de objetos. de tal forma que el proceso de creación pueda ser desacoplado de la implementación del resto del sistema. .Tipos De Patrones De Diseño  Patrones Creacionales Son los que facilitan la tarea de creación de nuevos objetos. Estos patrones brindan las siguientes características: •Instanciación genérica: Permite que los objetos sean creados dentro del sistema sin especificar clases concretas en el código. cuándo. •Restricciones creacionales: Algunos patrones ayudan a establecer restricciones sobre la creación de objetos. evitando que el cliente deba tener código complejo sobre como instanciar un determinado objeto.

Patrones Creacionales SINGLETON: ABSTRACT FACTORY: • Asegura que una determinada clase sea instanciada una y sólo una vez. . proporcionando un único punto de acceso global a ella. Ventajas:  Una clase de singleton puede controlar de cómo y cuándo el código cliente puede acceder a la única instancia. Una clase singleton puede ser modificada si los requerimientos cambian y la aplicación necesita limitar el número de instancias a un número diferente de uno. • Provee una interfaz para crear familias de objetos producto relacionado o que dependen entre sí. sin especificar sus clases concretas.

Patrones creaciones Factory Method: Define una interfaz para crear un objeto delegando la decisión de qué clase crear en las subclases. . Este enfoque también puede ser llamado constructor “virtual”.

Simplifica la construcción de objetos con estructura interna compleja y permite la construcción de objetos paso a paso. de forma que el mismo proceso de construcción pueda crear diferentes representaciones.Patrones creaciones Builder: Separa la construcción de un objeto complejo de su representación. Prototype: Facilita la creación dinámica de objetos mediante la definición de clases cuyos objetos pueden crear duplicados de sí mismos. Estos objetos son llamados prototipos. .

Adapter: Adapta la interfase Adaptee para usar en el objeto de Target. Participantes: Target: Define el dominio de la interfaz que el Cliente usa. Los patrones estructurales especifican la forma en que unas clases se relacionan con otras. Adapter: Permite a dos clases con diferentes interfaces trabajar entre ellas. . Cliente: Colabora con los objetos conformando la interfaz del Target. a través de un objeto intermedio con el que se comunican e interactúan. Adaptee (el adaptado): Define la interfaz existente que necesita adaptación.Los patrones estructurales son los siguientes: Patrones Estructurales  Son patrones que nos facilitan la modelización de nuestro software especificando la forma en la que unas clases se relacionan con otras.

.

o ser el último de esa rama. donde todos los elementos emplean una misma interfaz.Patrones Estructurales Bridge: Desacopla una abstracción de su implementación. Composite(Compuesto): Facilita la creación de estructuras de objetos en árbol. Cada uno de ellos puede a su vez contener un listado de esos objetos. . para que las dos puedan evolucionar de forma independiente. Decorator: Permite añadir funcionalidad extra a un objeto (de forma dinámica o estática) sin modificar el comportamiento del resto de objetos del mismo tipo.

.Patrones Estructurales Facade: Una facade (o fachada) es un objeto que crea una interfaz simplificada para tratar con otra parte del código más compleja. Un ejemplo podría ser crear una fachada para tratar con una clase de una librería externa. de tal forma que simplifica y aísla su uso.

. Proxy virtual: Se encarga de crear objetos de gran tamaño bajo demanda.Patrones Estructurales Flyweight: Una gran cantidad de objetos comparte un mismo objeto con propiedades comunes con el fin de ahorrar memoria. Proxy de protección: Se encarga de controlar el acceso al objeto representado. Este patrón posee las siguientes variantes:  Proxy remoto: Se encarga de representar un objeto remoto como si estuviese localmente. un archivo en disco o cualquier otro recurso que sea costoso o imposible de duplicar. Proxy: Es una clase que funciona como interfaz hacia cualquier otra cosa: una conexión a Internet.

de manera tal de poder parametrizar a los clientes con distintas solicitudes. Interpreter: Define una representación para una gramática así como el mecanismo para evaluarla.Los patrones de comportamiento son los siguientes: Patrones de Comportamiento • En este último grupo se encuentran la mayoría de los patrones. al ser representadas como un objeto también pueden pasarse como parámetro o devolverse como resultados. y poder deshacer las operaciones. relaciones y responsabilidades entre objetos. Estas solicitudes. Cada receptor tiene la opción de consumir esa petición o pasárselo al siguiente dentro de la cadena. El árbol de sintaxis del lenguaje se suele modelar mediante el patrón Composite. Chain of responsibility: se evita acoplar al emisor y receptor de una petición dando la posibilidad a varios receptores de consumirlo. encolarlas o llevar un registro de las mismas.Este patrón busca definir un intérprete para dicho lenguaje. Estos patrones se focalizan en el flujo de control dentro de un sistema. • Tienen que ver con algoritmos y asignación de responsabilidades. Representa una solicitud con un objeto. .  Command: Son objetos que encapsulan una acción y los parámetros que necesitan para ejecutarse. para el cual define una gramática y un intérprete de la misma para poder resolver los problemas. y se usan para gestionar algoritmos.

Command .

y serán avisados cuando esto ocurra. Mediator: Objeto que encapsula cómo otro conjunto de objetos interactúan y se comunican entre sí. . Memento: Este patrón otorga la capacidad de restaurar un objeto a un estado anterior.Patrones de Comportamiento Iterator: Se utiliza para poder movernos por los elementos de un conjunto de forma secuencial sin necesidad de exponer su implementación específica. Simplifica la comunicación entre objetos dentro del sistema mediante la introducción de un objeto mediador que administra la distribución de mensajes entre objetos. Brinda un mecanismo que permite a un componente transmitir de forma flexible mensajes a aquellos objetos que hayan expresado interés en él. Observer: Los objetos son capaces de suscribirse a una serie de eventos que otro objetivo va a emitir.

Iterator .

Template Method: Especifica el esqueleto de un algoritmo.Patrones de Comportamiento State: Permite modificar la forma en que un objeto se comporta en tiempo de ejecución. basándose en su estado interno. Visitor: Permite separar el algoritmo de la estructura de datos que se utilizará para ejecutarlo. Estos algoritmos pueden ser intercambiados por la aplicación en tiempo de ejecución. permitiendo a las subclases definir cómo implementan el comportamiento real. Strategy: Permite la selección del algoritmo que ejecuta cierta acción en tiempo de ejecución. De esta forma se pueden añadir nuevas operaciones a estas estructuras sin necesidad de . los cuales son intercambiables. Define una jerarquía de clases que representan algoritmos.

o bien. .Antipatrones Los antipatrones (antipatterns) son descripciones de situaciones. Un antipatrón puede ser el resultado de una decisión equivocada sobre cómo resolver un determinado problema. la aplicación correcta de un patrón de diseño en el contexto equivocado. o soluciones. recurrentes que producen consecuencias negativas.

en la medida de lo posible. etc. 2. en otras oportunidades son las presiones externas (por ejemplo plazos de entrega) las que lo hacen. Publicar la solución: éste conocimiento debe ser diseminado con el fin de que si otros desarrolladores se encuentran con uno similar podrán resolverlo. 3. 5.Antipatrones Un proceso para el uso de antipatrones Tate (2002) propone un proceso de seis pasos para el estudio de antipatrones 1. 4. . la nueva solución debería implementarse utilizando patrones de diseño. Encontrar el problema: una falla en el comportamiento. Refactorizar el código: el código que produjo el error debe ser refactorizado y. un error en el diseño. A menudo las herramientas inducen el mal uso de las mismas. Identificar debilidades. Establecer un patrón de fallas: identificar en qué condiciones se da el problema. o posibles problemas del proceso.

Esta estructura va cambiando a medida que los programadores aprenden nuevas restricciones y enfoques que modifican la forma de implementar soluciones. A menudo sucede que a medida que se va desarrollando el sistema éste va perdiendo la estructura definida por la arquitectura. . 1998). •Para que un sistema sea fácilmente extensible y mantenible debe estar bien estructurado. Una forma de volver a estructurar el código fuente es mediante la refactorización. lo cual no siempre se logra. •A continuación se enumeran los antipatrones de desarrollos descriptos por (Brown et al.Catálogo De Antipatrones De Desarrollo •Los anti patrones de desarrollo de software describen problemas comunes con los que se encuentran los programadores durante el proceso de desarrollo.

o componente. aparece en aquellos diseños donde una clase monopoliza la mayoría del comportamiento del sistema. mientras que el resto de las clases sólo encapsulan información. . God Class o Winnebago es una clase. incluso cuando son representados con notación del paradigma orientado a objetos y se implementen en un lenguaje orientado a objetos. que conoce o hace demasiado. Estos diseños son procedurales.The Blob The Blob.

Poltergeists Poltergeists. a menudo en un determinado orden. Son de relativa facilidad de encuentro ya que sus nombres suelen llevar el sufijo “controller” o “manager”. o Big DoIt Controller Class. o Gipsy. difíciles de mantener y comprender. Las clases poltergeists (fantasmas) se caracterizan por tener pocas responsabilidades dentro del sistema y un ciclo de vida bastante breve. Estas clases desordenan el diseño ya que agregan abstracciones innecesarias. son excesivamente complejas. o Proliferation of Classes. . ya que “aparecen” solamente para iniciar algún método en alguna clase.