viernes, 29 de mayo de 2009
Template Method

Define una estructura algorítmica en la súper clase, delegando la implementación a las subclases. Es decir, define una serie de pasos, en donde los pasos serán redefinidos en las subclases.

Características generales de este patrón:

Nombre:

Template Method.

Propósito:

Define el esqueleto de un algoritmo, dejando algunos pasos a las subclases. Template Method permite a las subclases redefinir ciertos pasos de un algoritmo sin cambiar la estructura del algoritmo.

Aplicabilidad:

Este patrón se utiliza generalmente cuando:

· Para proporcionar un esqueleto de estructura de un método, que permite a las subclases redefinir partes específicas del método. 

· Para centralizar los pedazos de un método que se definen en todos los subtipos de una clase, pero que siempre tienen una pequeña diferencia en cada subclase. 

· Para el control de las operaciones de las subclases que tienen la obligación de anular.

Estructura:

Participantes:

· AbstractClass: Una clase en este papel tienen un método concreto que contiene la lógica de alto nivel (el esqueleto del algoritmo) de la clase. Este es el método plantilla indicado en el diagrama. Este método llama a otros métodos, definidos en la clase AbstractClass como métodos abstractos, que invocan a la lógica de bajo nivel que varia para cada subclase de la clase AbstractClass.

· ConcreteClass: Una clase en este papel es una subclase concreta de una clase AbstractClass. La clase AbstractClass sobrescribe los métodos abstractos definidos en su superclase y proporciona la lógica necesaria (los pasos del algoritmo) para completar la lógica del método plantilla.

Consecuencias:

· Favorece la reutilización del código.

· Lleva a una estructura de control invertido, la superclase base invoca los métodos de las subclases.

Patrones relacionados:

· Factory Method.

· Strategy.

Etiquetas: , ,

 
posted by Camilo Mojica at 22:16 | Permalink | 0 comments
Visitor

Permite incluir nuevos métodos a una clase sin tener que modificarla. Es muy utilizado en compiladores, intérpretes y analizadores de código.

Características generales de este patrón:

Nombre:

Visitor.

Propósito:

Representa una operación que será realizada sobre los elementos de una estructura de objetos. Visitor permite definir nuevas operaciones sin cambiar las clases de los elementos sobre las que se realiza.

Aplicabilidad:

Este patrón se utiliza generalmente cuando:

· Estructuras jerárquicas (arboles).

· Muchas clases poco relacionadas entre sí.

· Estructura de objetos con diferentes interfaces y posibilidad de ampliación.

· Estructura con altas probabilidades de incluir de nuevos métodos.

Estructura:

Participantes:

· Visitor: Declara una operación visitar para cada clase de operación ConcretreElement de la estructura de objetos.

· ConcreteVisitor: Implementa cada operación declarada por Visitor.

· Element: Define una operación que le permite aceptar la visita de un Visitor.

· ConcretElement: Implementa la operación Aceptar que se limita a invocar su correspondiente método del Visitor.

· ObjectStructure: Puede enumerar sus elementos y puede proporcionar una interfaz de alto nivel para permitir al Visitor visitar sus elementos.

Consecuencias:

· Facilita la definición de nuevas operaciones.

· Las operaciones relacionadas están en el mismo módulo.

· Puede simplificar la realización de los algoritmos y permite que si los algoritmos comparten algunas estructuras de datos, éstas se puedan encapsular en el correspondiente visitor.

· Se dificulta la definición de nuevos tipos de datos sobre los que han de actuar las operaciones.

· Cada nuevo tipo de datos significa la definición de un método en Visitor y otro en cada uno de los ConcreteVisitor

Patrones relacionados:

· Interprete.

· Iterator.

· Composite.

Etiquetas: , ,

 
posted by Camilo Mojica at 21:59 | Permalink | 0 comments
Strategy

Permite mantener un conjunto de algoritmos de los que el objeto cliente puede elegir aquel que le conviene e intercambiarlo según sus necesidades.

Características generales de este patrón:

Nombre:

Strategy.

También conocido como:

Policy.

Propósito:

Define una familia de algoritmos, encapsula cada uno de ellos y los hace intercambiables. Strategy permite al algoritmo variar independientemente de los clientes que lo utilicen.

Aplicabilidad:

Este patrón se utiliza generalmente cuando:

· Se tiene una variedad de maneras de realizar una acción.

· Se puede no saber qué enfoque es apropiado paraa utilizar hasta el tiempo de ejecución.

· Se quiere añadir fácilidad a las posibles formas de realizar una acción.

· Se desea conservar el código mantenible a medida que se añaden comportamientos.

Estructura:

Participantes:

· Strategy: Declara una interfaz común a todos los algoritmos soportados.

· ConcreteStrategy: Implementa el algoritmo que usa la interfaz Strategy.

· Context: Se configuran con un objeto ConcreteStrategy. Mantiene una referencia a un objeto Strategy. Puede definir una interfaz que permite acceder a sus datos.

Consecuencias:

· Se define una familia de algoritmos similares mediante la cual es posible elegir una implementación (variante) particular.

· La lógica condicional es eliminada del Contexto.

· Los clientes quedan acoplados con las estrategias concretas por lo que es recomendable utilizar este patrón solamente cuando las variantes sean relevantes para los clientes.

· Diferentes alternativas para que las estrategias tengan disponibles los datos que necesitan para funcionar.

· Las estrategias aumentan la cantidad de objetos de la aplicación

Patrones relacionados:

· Singleton.

· Flyweight.

· Factory Method.

Etiquetas: , ,

 
posted by Camilo Mojica at 21:33 | Permalink | 0 comments
State

Cuando el contexto en el que se está desarrollando requiere que un objeto tenga diferentes comportamientos según el estado en que se encuentra, resulta complicado poder manejar el cambio de comportamientos y los estados de dicho objeto, todos dentro del mismo bloque de código. El patrón State propone una solución a esta complicación, creando básicamente, un objeto por cada estado posible del objeto que lo llama. Permite disponer de varios métodos para resolver un problema y elegir cuál utilizar en tiempo de ejecución.

Características generales de este patrón:

Nombre:

State.

También conocido como:

Objects for States.

Propósito:

Permite a un objeto alterar su comportamiento según el estado interno en que se encuentre.

Aplicabilidad:

Este patrón se utiliza generalmente cuando:

· El comportamiento de un objeto es determinado por un estado interno que cambia en respuesta a los eventos. Debe cambiar su comportamiento en tiempo de ejecución cuando cambie su estado.

· La organización de la lógica que maneja un estado de un objeto debería ser capaz de cambiar a muchos estados sin llegar a ser una gran cantidad de código inmanejable.

· Las operaciones tienen sentencias condicionales largas que dependen del estado del objeto. Este estado es representado por una constante enumerada. A menudo, varias operaciones contendrán esta misma estructura condicional. Este patrón sitúa cada rama de la sentencia condicional en una clase separada. Esto permite tratar el estado de un objeto como un objeto que puede variar de forma independiente a otros objetos.

Estructura:

Participantes:

· Context: Define la interfaz de interés para los clientes, mantiene una instancia de una subclase que define.

· State: Define una interfaz para encapsular el comportamiento asociado con un estado de Context. 

· StateConcret: Cada subclase implementa el comportamiento asociado con un estado del 

Context.

Consecuencias:

· Localiza el comportamiento dependiente del estado.

· Hace explícitas las transiciones entre estados.

· Los objetos Estado pueden compartirse.

Patrones relacionados:

· Flyweight.

· Mediator.

· Singleton.

Etiquetas: , ,

 
posted by Camilo Mojica at 21:07 | Permalink | 0 comments
Observer

Es usado como un sistema de detección de eventos con el fin de hacer notificaciones de estos cambios a las clases realcionadas.

Características generales de este patrón:

Nombre:

Observer.

También conocido como:

Publisher-Subcriber.

Propósito:

Define una dependencia del tipo uno-a-muchos entre objetos, de manera que cuando uno de los objetos cambia su estado, el observador se encarga de notificar este cambio a todos los otros dependientes.

Aplicabilidad:

Este patrón se utiliza generalmente cuando un sistema:

· Ha enviado al menos un mensaje.

· Recibido uno o más mensajes que pueden variar dentro de una aplicación o entre aplicaciones.

· Este patron es aplicado con frecuencia en situaciones en las que el remitente del mensaje no necesita o requiere saber cómo actuar sobre los receptores de la información que proporciona.Hay un grupo de objetos en un sistema que potencialmente pueden responder para el mismo tipo de mensaje.

Estructura:

Participantes:

· Subject: Conoce a sus observadores, que pueden ser un número arbitrario. Proporciona una interfaz para añadir y quitar objetos observadores.

· Observer: Define la interfaz de los objetos a los que se debe notificar cambios en un sujeto.

· ConcreteSubject: Almacena el estado de interés para sus observadores. Envía notificaciones a sus observadores cuando su estado cambia.

· ConcreteObserver: mantiene una referencia a un ConcreteSubject, almacena el estado del sujeto que le resulta de interés, implementa Observe para mantener su estado consistente con el sujeto.

Consecuencias:

· Permite modificar sujetos y observadores de manera independiente.

· Reutilizar un sujeto sin reutilizar sus observadores, y viceversa.

· Capacidad de comunicación mediante difusión.

· Acoplamiento abstracto entre el sujeto y el observador. 

· Se pueden añadir/quitar observadores.

· Actualizaciones inesperadas. Una operación en el sujeto puede desencadenar una cascada de cambios en sus observadores.

Patrones relacionados:

· Mediator.

· Singleton.

Etiquetas: , ,

 
posted by Camilo Mojica at 16:20 | Permalink | 0 comments
Memento

El patrón memento se puede utilizar, fundamentalmente, para guardar el estado de un objeto en momentos determinados permitiendonos la implementación de utilidades como "deshacer" y "rehacer" o incluso almacenar el estado completo de una aplicación.

Características generales de este patrón:

Nombre:

Memento.

También conocido como:

Cadena de Responsabilidad.

Propósito:

Memento guarda parte o todo el estado interno de un objeto, para que este objeto pueda ser
restaurado más tarde al estado guardado previamente por Memento. Esta operación debe ocurrir sin romper el principio del encapsulamiento.

Aplicabilidad:

Este patrón se utiliza generalmente cuando:

· Todo o parte del estado de un objeto debe o se desea ser guardado para ser restaurado más tarde.
· Cuando una interfaz directa para obtener el estado de un objeto exponga detalles de su
implementación.

Estructura:

Participantes:

· Originator: Originator crea un objeto Memento conteniendo una fotografía de su estado interno. Originator usa a Memento para restaurar su estado interno.

· Memento: Almacena el estado interno de un objeto Originator. El Memento puede almacenar mucho o parte del estado interno de Originator. Tiene dos interfaces. Una para Caretaker, que le permite manipular el Memento únicamente para pasarlo a otros objetos. La otra interfaz sirve para que Originator pueda almacenar/restaurar su estado interno, sólo Originator puede acceder a esta interfaz, al menos en teoría.

· Caretaker: Es responsable por mantener seguro a Memento, Carataker no opera o examina el contenido de Memento.Handler: Define una interfaz para tratar las peticiones, implementa el enlace al sucesor.

Consecuencias:

· Preservación de los límites de la encapsulamiento.

· Simplifica al Creador.

· El uso de mementos puede ser costoso.

· Definición de interfaces reducidas y amplias.

· Costes ocultos en el cuidado de los mementos.

Patrones relacionados:

· Command.

· Iterator.

Etiquetas: , ,

 
posted by Camilo Mojica at 11:16 | Permalink | 0 comments
Mediator

Es un patrón que coordina las relaciones entre sus asociados. Permite la interacción de varios objetos, sin generar acoples fuertes en esas relaciones.

Características generales de este patrón:

Nombre:

Mediator.

También conocido como:

Mediador.

Propósito:

Define un objeto que encapsula cómo interactúan un conjunto de objetos. Promueve un bajo acoplamiento al evitar que los objetos se refieran unos a otros explícitamente, y permite variar la interacción entre ellos de forma independiente.

Aplicabilidad:

Este patrón se utiliza generalmente cuando:

· Un conjunto grande de objetos se comunica de una forma bien definida, pero compleja.

· Dificultad para reutilizar objetos ya que nos referimos a varios objetos para comunicarnos.

· El comportamiento de muchos objetos que esta distribuido entre varias clases, puede resumirse en una o varias por subclasificación.

Estructura:

Participantes:

· Mediator: Define una interfaz para comunicarse con los otros objetos.

· ConcreteMediator: Implementa el comportamiento cooperativo entre los Objetos. Conoce a los Objetos.

· Objetos: Cada objeto conoce su mediador, y usa a este para comunicarse con otros objetos.

Consecuencias:

· Reduce la herencia.

· Desacopla a los “Colegas”.

· Simplifica los protocolos de los objetos.

· Abstrae cómo cooperan los objetos.

· Centraliza el control.

Patrones relacionados:

· Facade.

· Observer.

Etiquetas: , ,

 
posted by Camilo Mojica at 0:10 | Permalink | 0 comments
jueves, 28 de mayo de 2009
Iterator

Define una interfaz que declara los métodos necesarios para acceder secuencialmente a un grupo de objetos de una colección.

Características generales de este patrón:

Nombre:

Iterator.

También conocido como:

Cursor.

Propósito:

Proporciona un modo de acceder a los elementos de un agregado sin mostrar su estructura interna.

Aplicabilidad:

Este patrón se utiliza generalmente cuando:

· Acceder al contenido de un objeto agregado sin exponer su representación interna.

· Permitir varios recorridos sobre objetos agregados.

· Proporcionar una interfaz uniforme para recorrer diferentes estructuras agregadas (iteración polimórfica).

Estructura:

Participantes:

· Iterator: Define una interfaz para recorrer los elementos.

· ConcreteIterator: Implementa la interfaz iterator.

· Aggregate: Define una interfaz para crear un objeto iterador.

· ConcreateAggregate: Implementa la interfaz de creación del iterador.

Consecuencias:

· Permite variaciones en el recorrido de un agregado.

· Los iteradores simplifican la interfaz Agregado.

· Se puede hacer mas de un recorrido a la vez sobre un agregado.

Patrones relacionados:

· Composite.

· Factory Method.

· Memento.

Etiquetas: , ,

 
posted by Camilo Mojica at 23:30 | Permalink | 0 comments
Interprete

Interprete se usa para definir un lenguaje para representar expresiones regulares que representen cadenas a buscar dentro de otras cadenas. Además, en general, para definir un lenguaje que permita interpretar las distintas instancias de una familia de problemas.

Características generales de este patrón:

Nombre:

Interprete.

También conocido como:

Interpreter.

Propósito:

Dado un lenguaje, define una representación para su gramática junto con un intérprete que usa la representación para interpretar sentencias del lenguaje.

Aplicabilidad:

Este patrón se utiliza generalmente cuando:

· Hay un lenguaje sencillo de interpretar.

· Los problemas recurrentes se puede expresar en ese idioma. 

· La eficiencia no es la cuestión principal. Hay un grupo de objetos en un sistema que potencialmente pueden responder para el mismo tipo de mensaje.

Estructura:

Participantes:

· AbstractExpression: Declara las operaciones de interpretación que las especializaciones han de implementar.

· TerminalExpression: Representan a los símbolos terminales.

· NonterminalExpression: Representan a las producciones de la gramática.

· Context: Contiene la información global del proceso de interpretación.

· Client: Construye el árbol sintáctico de una frase del lenguaje e invoca la operación de interpretación.

Consecuencias:

· Es fácil cambiar y ampliar la gramática.

· Resulta fácil implementarla.

· Las gramáticas complejas son difíciles de mantener.

· Añadir nuevos modos de interpretar expresiones.

Patrones relacionados:

· Composite.

· Flyweight.

· Iterator.

· Visitor.

Etiquetas: , ,

 
posted by Camilo Mojica at 22:47 | Permalink | 0 comments