Está en la página 1de 9

UTN-FRC-Diseo de Sistemas

Mara Florencia Ruiz

2.1. Introduccin a los patrones. 2.1.1. Concepto de patrn. 2.1.2. Estructura de los patrones. 2.1.3. Ventajas en el uso de los patrones 2.2. Patrones de Diseo. 2.2.1. Patrones de creacin. Encapsulan que clases concretas usa el sistema y como se crean y asocian las instancias de esas clases. El sistema conoce las clases abstractas. Dan flexibilidad en que se crea, quien las crea, como la crea y cuando la crea. Ayudan a hacer un sistema independiente de cmo se crean, componen y representan sus objetos. Los patrones de creacin son: Abstract Factory: Propsito: proporciona una interfaz para crear familias de objetos relacionados o que dependen entre s, sin especificar sus clases concretas. (Creacin de muchos objetos que difieren en algn aspecto) Aplicabilidad: se usa cuando - Un sistema debe ser independiente de cmo se crean, componen y representan sus productos. - Un sistema debe ser configurado con una familia de productos de entre varias. - Una familia de objetos relacionados est diseada para ser usada conjuntamente. - Quiere proporcionar una biblioteca de clases de productos y solo quiere revelar sus interfaces. Participantes: - Fabrica abstracta - Fabrica concreta - Producto abstracto - Producto concreto - Cliente Consecuencias: - Asla las clases concretas - Facilita el intercambio de familias de productos - Promueve la consistencia entre productos - Es difcil dar lugar a nuevos tipos de productos Factory Method: Propsito: define una clase interfaz para crear un objeto, pero deja que las subclases decidan que clase instanciar. Delegando a las subclases la creacin de objetos. Aplicabilidad: se usa cuando - Una clase no puede prever la clase de objeto que debe crear. - Una clase quiere que sean sus subclases quienes especifiquen los objetos que sta crea. - Las clases delegan la responsabilidad en una de entre varias clases auxiliares y queremos localizar qu subclases de auxiliar concreta es en la que se delega. Participantes: - Producto - Producto concreto - Creador - Creador concreto Consecuencias: - Proporciona enganches para las subclases - Conecta jerarquas de clases paralelas Singleton: Propsito: Garantiza que una clase tenga una nica instancia y proporciona un punto de acceso global a ella. V2.0 Anexo I Patrones de diseo
Pgina 1 de 9

UTN-FRC-Diseo de Sistemas

Mara Florencia Ruiz

Aplicabilidad: se usa cuando - Debe haber una instancia de una clase y debe ser accesible a los clientes desde un punto de acceso conocido. - La nica instancia debe ser extensible mediante herencia y los clientes deberan ser capaces de usar una instancia extendida sin modificar su cdigo. Participantes: - Singleton Consecuencias: - Acceso controlado a la nica instancia - Espacio de nombre reducido - Permite el refinamiento de operaciones y su representacin - Permite un nmero variable de instancias - Ms flexible que las operaciones de clase Builder: Propsito: separa la construccin de un objeto complejo de su representacin, de forma que el mismo proceso de construccin puede crear diferentes representaciones. Aplicabilidad: se usa cuando - El algoritmo para crear un objeto complejo debe ser independiente de las partes de que se compone dicho objeto y de cmo se ensamblan. - El proceso de construccin debe permitir diferentes representaciones del objeto que est siendo construido. Participantes: - Constructor - Constructor concreto - Director - Producto Consecuencias: - Permite variar la representacin interna de un producto - Asla el cdigo de construccin y representacin - Proporciona un control ms fino sobre el proceso de construccin. Prototype: Propsito: especifica los tipos de objetos a crear por medio de una instancia prototpica y crea nuevos objetos copiando de este prototipo. Aplicabilidad: se usa cuando - Las clases a instanciar sean especificadas en tiempo de ejecucin - Para evitar construir una jerarqua de clases de fbricas paralelas a la jerarqua de clases de los productos - Las instancias de una clase puedan tener uno de entre slo unos pocos estados diferentes. Participantes: - Prototipo - Prototipo concreto - Cliente Consecuencias: - Aadir y eliminar productos en tiempo de ejecucin - Especificar nuevos objetos modificando valores - Especificar nuevos objetos variando la estructura - Reduce la herencia - Configurar dinmicamente una aplicacin con clases. 2.2.2. Patrones estructurales. Determinan como combinar objetos y clases para definir estructuras complejas. - Comunicar dos clases incompatibles. - Aadir funcionalidad a objetos. Los patrones estructurales son: Bridge: V2.0 Anexo I Patrones de diseo
Pgina 2 de 9

UTN-FRC-Diseo de Sistemas

Mara Florencia Ruiz

Propsito: desacopla una abstraccin de su implementacin de manera que ambas puedan variar de forma independiente. Aplicabilidad: se usa cuando - Se quiera evitar un enlace permanente entre una abstraccin y su implementacin - Las abstracciones e implementaciones son extensibles mediante subclases - Los cambios en la implementacin de una abstraccin no deben afectar a los clientes - Para ocultar a los clientes la implementacin de la interfaz - Proliferacin de clases Participantes: - Abstraccin - Abstraccin refinada - Implementador - Implementador concreto Consecuencias: - Desacopla la interfaz y la implementacin - Mejora la extensibilidad - Oculta detalles de implementacin a los clientes Composite Propsito: combina los objetos en estructura de rbol para representar jerarquas de todo-parte. Permite que los clientes traten de manera uniforme a los objetos individuales y a los compuestos. Aplicabilidad: se usa cuando - Se quiera representar jerarquas todo-parte - Se quiera que los clientes sean capaces de obviar las diferencias entre composiciones de objetos y objetos individuales. Participantes: - Componente - Hoja - Compuesto - Cliente Consecuencias: - Define jerarquas de clases formadas por objetos primitivos y compuestos. - Simplifica al cliente - Puede hacer que un diseo sea demasiado general Facade: Propsito: proporciona una interfaz unificada para un conjunto de interfaces de un subsistema. Define una interfaz de alto nivel que hace que el subsistema sea ms fcil de usar. Aplicabilidad: se usa cuando - Se quiera proporcionar una interfaz simple para un subsistema complejo - Haya muchas dependencias entre los clientes y las clases que implementan una abstraccin - Se quiere dividir en capas los subsistemas Participantes: - Fachada - Clases del subsistema Consecuencias: - Oculta a los clientes los componentes de subsistema - Promueve un dbil acoplamiento entre el subsistema y sus clientes - No impide que las aplicaciones usen las clases del subsistema en caso de que sea necesario Adapter:
Pgina 3 de 9

V2.0 Anexo I Patrones de diseo

UTN-FRC-Diseo de Sistemas

Mara Florencia Ruiz

Propsito: convierte la interfaz de una clase en otra distinta que es la que esperan los clientes. Permite que cooperen las clases que de otra manera tendran interfaces incompatibles. Aplicabilidad: se usa cuando - Se quiere usar una clase existente y su interfaz no concuerda con la que necesita - Se quiere crear una clase reutilizable que coopere con clases no relacionadas o que no han sido previstas - (Adaptador de objetos) es necesario usar varias subclases existentes, pero no resulta prctico adaptar su interfaz heredando de cada una de ellas Participantes: - Objetivo - Cliente - Adaptable - Adaptador Consecuencias: - Adapta una clase Adaptable a Objetivo - Permite que Adaptador redefina parte del comportamiento de Adaptable - Introduce un solo objeto - Un adaptador de objetos: permite que un mismo Adaptador funciones con muchos Adaptables y hace que sea ms fcil redefinir el comportamiento de Adaptable. Decorator: Propsito: aade dinmicamente nuevas responsabilidades a un objeto, proporcionando una alternativa flexible a la herencia para extender funcionalidad. Aplicabilidad: se usa cuando - Para aadir objetos individuales de forma dinmica y transparente - Para responsabilidades que pueden ser retiradas - La extensin mediante la herencia no es viable Participantes: - Componente - Componente concreto - Decorador - Decorador concreto Consecuencias: - Ms flexibilidad que la herencia esttica - Evita clases cargadas de funciones en la parte de arriba de la jerarqua - Un decorador y su componente no son idnticos - Muchos objetos pequeos Flyweight: Propsito: usa el comportamiento para permitir un gran nmero de objetos de granularidad fina de forma eficiente Aplicabilidad: se usa cuando - Cuando una aplicacin usa un gran nmero de objetos - Los costes de almacenamiento son elevados debido a la gran cantidad de objetos - La mayor parte del estado del objeto pueden hacerse extrnseco - Muchos grupos de objetos pueden reemplazarse por relativamente pocos objetos compartidos, una vez que se ha eliminado el estado extrnseco. - La aplicacin no depende de la identidad de un objeto Participantes: - Pero ligero
Pgina 4 de 9

V2.0 Anexo I Patrones de diseo

UTN-FRC-Diseo de Sistemas

Mara Florencia Ruiz

- Peso ligero concreto - Peso ligero concreto no compartido - Fabrica de pesos ligeros - Cliente Consecuencias: - Introduce costes de tiempo de ejecucin asociados con la transferencia, bsqueda y clculo del estado extrnseco. - Ahorro de espacio de almacenamiento (cuantos ms objetos peso ligero se compartan, mayor ser el ahorro de almacenamiento) Proxy: Propsito: proporciona un sustituto o representante de otro objeto para controlar el acceso a este. Aplicabilidad: se usa cuando - Cada vez que hay necesidad de una referencia a un objeto ms verstil o sofisticado que un simple puntero - Algunas situaciones: Proxy remoto: proporciona un representante local de un objeto situado en otro espacio de direcciones. Proxy virtual: crea objetos costosos por encargo. Proxy de proteccin: controla el acceso al objeto original. Referencia inteligente: sustituto de un simple puntero que lleva a cabo operaciones adicionales cuando se accede a un objeto. Participantes: - Proxy - Sujeto - Sujeto real Consecuencias: - Proxy remoto: puede ocultar el hecho de que un objeto reside en un espacio de direcciones diferente. - Proxy virtual: puede llevar a cabo optimizaciones tales como crear un objeto por encargo. - Proxies de proteccin y las referencias inteligentes: permiten realizar tareas de mantenimiento adicionales cuando se accede a un objeto. 2.2.3. Patrones de comportamiento. Se ocupan de algoritmos y reparto de responsabilidades. Describen los patrones de comunicacin entre objetos y clases. Se pueden definir abstracciones de algoritmos. Cooperaciones entre los objetos para realizar tareas complejas, reduciendo las dependencias entre los objetos. Asociar comportamiento a objetos e invocar su ejecucin. Los patrones de comportamiento son: Iterator: Propsito: proporciona un modo de acceder secuencialmente a los elementos de un objeto agregado sin exponer su representacin interna. Aplicabilidad: se usa para - Acceder al contenido de un objeto agregado sin exponer su representacin interna - Permitir varios recorridos sobre objetos agregados - Proporcionar una interfaz uniforme para recorrer diferentes estructuras agregadas Participantes: - Iterador - Iterador concreto - Agregado - Agregado concreto Consecuencias: V2.0 Anexo I Patrones de diseo
Pgina 5 de 9

UTN-FRC-Diseo de Sistemas

Mara Florencia Ruiz

Permite variaciones en el recorrido de un agregado Simplifican la interfaz Agregado Se puede hacer ms de un recorrido a la vez sobre un agregado

Memento: Propsito: representa y externaliza el estado interno de un objeto sin violar el encapsulamiento, de forma que este pueda volver a dicho estado ms tarde. Aplicabilidad: se usa cuando - Hay que guardar una instantnea del estado de un objeto para que pueda volver posteriormente a ese estado - Una interfaz directa para obtener el estado exponga detalles de implementacin y rompa la encapsulacin del objeto Participantes: - Memento - Creador - Conserje Consecuencias: - Preservacin de los lmites de la encapsulacin - Simplifica el creador - El uso del Memento puede ser costoso - Definicin de interfaces reducidas y amplias - Costes ocultos en el cuidado de los mementos Observer: Propsito: define una dependencia de uno a muchos entre los objetos, de forma que cuando un objeto cambie el estado se notifica y se actualizan automticamente todos los objetos que dependen de l. Aplicabilidad: se usa cuando - Una abstraccin tiene dos aspectos y uno depende del otro - Un cambio en un objeto requiere cambiar otros - Un objeto debera ser capaz de notificar a otros sin hacer suposiciones sobre quienes son dichos objetos Participantes: - Sujeto - Sujeto concreto - Observador - Observador concreto Consecuencias: - Acoplamiento abstracto entre Sujeto y Observador - Capacidad de comunicacin mediante difusin - Actualizaciones inesperadas State: Propsito: permite que un objeto modifique su comportamiento cada vez que cambie su estado interno. Parecer que cambia la clase del objeto Aplicabilidad: se usa cuando - El comportamiento de un objeto depende de su estado y debe cambiar en tiempo de ejecucin dependiendo de ese estado - Las operaciones tienen largas sentencias condicionales con mltiples ramas que dependen del estado del objeto. Participantes: - Contexto - Estado - Subclases Estado Concreto Consecuencias: - Localiza el comportamiento dependiente del estado y divide dicho comportamiento en diferentes estados - Hace explcitas las transiciones entre estados - Los objetos Estado pueden compartirse
Pgina 6 de 9

V2.0 Anexo I Patrones de diseo

UTN-FRC-Diseo de Sistemas

Mara Florencia Ruiz

Strategy: Propsito: define una familia de algoritmos, encapsula cada uno de ellos y los hace intercambiables. Permite que un algoritmo vare independientemente de los clientes que lo usan. Aplicabilidad: se usa cuando - Muchas clases relacionadas difieren solo en su comportamiento - Se necesitan distintas variantes de un algoritmo - Un algoritmo usa datos que los clientes no deberan conocer - Una clase define muchos comportamientos, y estos se representan como mltiples sentencias condicionales en sus operaciones Participantes: - Estrategia - Estrategia concreta - Contexto Consecuencias: - Familias de algoritmos relacionados - Una alternativa a la herencia - Las estrategias eliminan las sentencias condicionales Template method: Propsito: define en una operacin el esqueleto de algn algoritmo, delegando en las subclases algunas de sus pasos. Permite que las subclases redefinan ciertos pasos del algoritmo sin cambiar su estructura. Aplicabilidad: se usa cuando - Para implementar las partes de un algoritmo que no cambian y dejar que sean las subclases quienes implementen el comportamiento que puede variar. - El comportamiento repetido de varias clases debera ser factorizarse y ser localizado en una clase comn para evitar el cdigo duplicado - Para controlar las extensiones de las subclases Participantes: - Clase abstracta - Clase concreta Consecuencias: Chain of responsability: Propsito: evitar acoplar el emisor de una peticin a su receptor, al dar a ms de un objeto la posibilidad de responder a la peticin. Crea una cadena con los objetos receptores y pasa la peticin a travs de la cadena hasta que esta sea tratada por algn objeto. Aplicabilidad: se usa cuando - Hay ms de un objeto que pueden manejar una peticin, y el manejador no se conoce de antemano. - Se quiere enviar una peticin a un objeto entre varios sin especificar explcitamente el receptor - El conjunto de Objetos que se pueden tratar una peticin debera ser especificado dinmicamente. Participantes: - Manejador - Manejador concreto - Cliente Consecuencias: - Reduce el acoplamiento - Aade flexibilidad para asignar responsabilidades a objetos - No se garantiza la recepcin Command:

V2.0 Anexo I Patrones de diseo

Pgina 7 de 9

UTN-FRC-Diseo de Sistemas

Mara Florencia Ruiz

Propsito: encapsula la peticin en un objeto permitiendo as parametrizar a los clientes con distintas peticiones, encolar o llevar algn registro de las peticiones y poder deshacer las peticiones Aplicabilidad: se usa cuando - Parametrizar objetos con una accin a realizar - Especificar, poner en cola y ejecutar peticiones en diferentes instantes de tiempo - Permitir deshacer - Permitir registrar los cambios de manera que se pueda volver a aplicar en caso de una cada del sistema - Estructurar el sistema alrededor de operaciones de alto nivel construidas sobre operaciones bsicas Participantes: - Orden - Orden concreta - Cliente - Invocador - Receptor Consecuencias: - Desacopla el objeto que invoca la operacin de aquel que sabe como realizarla - Las ordenes son objetos de primera clase - Se pueden ensamblar ordenes en una orden compuesta - Es difcil aadir nuevas ordenes Interpreter: Propsito: define para un lenguaje dado, una representacin de su gramtica junto con su intrprete que usa dicha representacin para interpretar sentencias del lenguaje Aplicabilidad: se usa cuando - Hay un lenguaje que interpretar y se pueden representar las sentencias del lenguaje como rboles sintcticos abstractos. Funciona mejor cuando: la gramtica es simple; la eficiencia no es una preocupacin crtica. Participantes: - Expresin abstracta - Expresin terminal - Expresin no terminal - Contexto - Cliente Consecuencias: - Es fcil cambiar y ampliar la gramtica - Fcil de implementar la gramtica - Las gramticas complejas son difciles de mantener - Aadir nuevos modos de interpretar expresiones Mediator: Propsito: define un objeto que encapsula cmo interactan los objetos. Promueve un bajo acoplamiento al evitar que los objetos se refieran unos a otros explcitamente, y permite variar la interaccin entre ellos de forma independiente. Aplicabilidad: se usa cuando - Un conjunto de objetos se comunican de forma bien definida, pero compleja - Es difcil reutilizar un objeto ya que ste se refiere a otros muchos objetos con los que se comunica - Un comportamiento que est distribuido entre varias clases debera poder ser adaptado sin necesidad de gran cantidad de sublcases. Participantes:
Pgina 8 de 9

V2.0 Anexo I Patrones de diseo

UTN-FRC-Diseo de Sistemas

Mara Florencia Ruiz

- Mediator - Mediator concreto - Clases Colega Consecuencias: - Reduce la herencia - Desacopla a los colegas - Simplifica los protocolos de los objetos - Abstrae como cooperan los objetos - Centraliza el control Visitor: Propsito: representa una operacin sobre los elementos de una estructura de objetos. Permite definir una nueva operacin sin cambiar las clases de los elementos sobre los que opera. Aplicabilidad: se usa cuando - Una estructura de objetos contiene muchas clase de objetos con diferentes interfaces y se quiere realizar operaciones sobre esos elementos que dependen de su clase concretar - Se necesitan realizar muchas operaciones distintas y no relacionadas sobre los objetos de una estructura de objetos. - Las clases que definen la estructura de objetos rara vez cambian, pero muchas veces se quiere definir nuevas operaciones obre la estructura Participantes: - Visitante - Visitante concreto - Elemento - Elemento concreto - Estructura de objetos Consecuencias: - El visitante facilita aadir nuevas operaciones - Un visitante agrupa operaciones relacionadas y separa las que no lo estn - Es difcil aadir nuevas clases de Elemento Concreto - Visitar varias jerarquas de clases

V2.0 Anexo I Patrones de diseo

Pgina 9 de 9

También podría gustarte