PATRONES DE COMPORTAMIENTO
Los patrones de comportamiento tienen mucho que ver con el flujo de control de un sistema. Determinadas maneras de establecer el control de un sistema se pueden tornar muy benéficas para el mantenimiento y la eficiencia de esta.
Los patrones de comportamiento son:
1. Chain of responsability (Cadena de responsabilidades).
2. Command (Comando).
3. Interpreter (Intérprete).
4. Iterator (Iterador).
5. Mediator (Mediador).
6. Memento (Recuerdo).
7. Observer (Observador).
8. State (Estado).
En Proceso:
9. Strategy (Estrategia).
10. Visitor (Visitante).
11. Template Method (Método Plantilla).
viernes, 29 de mayo de 2009
Chain of Responsability
Propósito
Establecer una cadena en un sistema, para facilitar la respuesta a un mensaje ya que este puede ser tratado en el nivel en que se adopta o ser redirigido a un objeto que si pueda operarlo.
Aplicabilidad
Use el patrón chain of responsability cuando un mensaje deba ser manipulado por un objeto de entre diversos del sistema, exista un conjunto de objetos de un sistema que pueden ser capaces de responder al mismo mensaje de forma eficiente, algunos de los eventos pueden ser manejados en el nivel en el cual se reciben o producen mientras que los otros tengan que redirigirse a otro objeto.
Implementación
El patrón chain of responsability necesita de los siguientes elementos:
• Handler: La interfaz en la que se define el método utilizado para pasar un mensaje al siguiente manejador.
• ConcreteHandler: La clase que implementa la interfaz Handler. Mantiene una referencia a la siguiente instancia de Handler.
Ventajas e Inconvenientes
Brinda una gran flexibilidad para el procesamiento de sucesos de una aplicación, esta flexibilidad que regala tiene un precio por que este patron es difícil de desarrollar, comprobar y depurar.
Si se producen muchos mensajes en un pequeño lapso de tiempo y estos son redireccionados muchas veces antes de haber sido manejados, se deteriora el rendimiento del sistema
Patrones Relacionados
• Composite: Cuando se combinan, Composite brinda soporte para una estructura basada en árbol y la propagación de mensajes, y Chain of responsability proporciona las reglas de propagación de estos mensajes.
Establecer una cadena en un sistema, para facilitar la respuesta a un mensaje ya que este puede ser tratado en el nivel en que se adopta o ser redirigido a un objeto que si pueda operarlo.
Aplicabilidad
Use el patrón chain of responsability cuando un mensaje deba ser manipulado por un objeto de entre diversos del sistema, exista un conjunto de objetos de un sistema que pueden ser capaces de responder al mismo mensaje de forma eficiente, algunos de los eventos pueden ser manejados en el nivel en el cual se reciben o producen mientras que los otros tengan que redirigirse a otro objeto.
Implementación
El patrón chain of responsability necesita de los siguientes elementos:
• Handler: La interfaz en la que se define el método utilizado para pasar un mensaje al siguiente manejador.
• ConcreteHandler: La clase que implementa la interfaz Handler. Mantiene una referencia a la siguiente instancia de Handler.
Ventajas e Inconvenientes
Brinda una gran flexibilidad para el procesamiento de sucesos de una aplicación, esta flexibilidad que regala tiene un precio por que este patron es difícil de desarrollar, comprobar y depurar.
Si se producen muchos mensajes en un pequeño lapso de tiempo y estos son redireccionados muchas veces antes de haber sido manejados, se deteriora el rendimiento del sistema
Patrones Relacionados
• Composite: Cuando se combinan, Composite brinda soporte para una estructura basada en árbol y la propagación de mensajes, y Chain of responsability proporciona las reglas de propagación de estos mensajes.
Command
Propósito
Encapsula un comando dentro de un objeto de manera que pueda ser almacenado, pasado como parámetro a métodos y devuelto al igual que cualquier otro objeto.
Aplicabilidad
Use el patrón Command cuando se necesita poner en cola y ejecutar diferentes comandos en momentos distintos, cuando sea requerido dar soporte para deshacer comandos, transacciones y procesos de identificación, cuando desea desacoplar la fuente de una petición de un objeto que la cumple cierta función.
Implementación
El patrón Command necesita de los siguientes elementos:
• Command: la interfaz en la que se definen los métodos utilizados por el Invoker usado.
• Invoker: El invocador del método execute del objeto Command.
• Receiver: El objetivo del Command que cumple la petición, contiene toda la información necesaria para ello.
• ConcreteCommand: Implementación de la interfaz Command. Mantiene una referencia al receptor Receiver.
Ventajas e Inconvenientes
Command es muy flexible en el sentido de que desacopla el disparador del evento del objeto que posee las herramientas y el conocimiento para ejecutarlo, facilita la introducción de nuevos comandos (hacer otra implementación y meterla a la aplicación), coopera con diversos objetos para compartir instancias de Command y también tiene la posibilidad de sustituir objetos Command o Receiver en período de ejecución.
Patrones Relacionados
• Composite: Usa Composite para implementar MacroCommand.
• Memento: Almacena el estado del objeto que recibe el comando para poder tolerar la función de deshacer este comando.
• Prototype: Es utilizado para duplicar el comando antes de archivarlo en el historial.
• Singleton: El historial comúnmente se implementa como un Singleton.
Encapsula un comando dentro de un objeto de manera que pueda ser almacenado, pasado como parámetro a métodos y devuelto al igual que cualquier otro objeto.
Aplicabilidad
Use el patrón Command cuando se necesita poner en cola y ejecutar diferentes comandos en momentos distintos, cuando sea requerido dar soporte para deshacer comandos, transacciones y procesos de identificación, cuando desea desacoplar la fuente de una petición de un objeto que la cumple cierta función.
Implementación
El patrón Command necesita de los siguientes elementos:
• Command: la interfaz en la que se definen los métodos utilizados por el Invoker usado.
• Invoker: El invocador del método execute del objeto Command.
• Receiver: El objetivo del Command que cumple la petición, contiene toda la información necesaria para ello.
• ConcreteCommand: Implementación de la interfaz Command. Mantiene una referencia al receptor Receiver.
Ventajas e Inconvenientes
Command es muy flexible en el sentido de que desacopla el disparador del evento del objeto que posee las herramientas y el conocimiento para ejecutarlo, facilita la introducción de nuevos comandos (hacer otra implementación y meterla a la aplicación), coopera con diversos objetos para compartir instancias de Command y también tiene la posibilidad de sustituir objetos Command o Receiver en período de ejecución.
Patrones Relacionados
• Composite: Usa Composite para implementar MacroCommand.
• Memento: Almacena el estado del objeto que recibe el comando para poder tolerar la función de deshacer este comando.
• Prototype: Es utilizado para duplicar el comando antes de archivarlo en el historial.
• Singleton: El historial comúnmente se implementa como un Singleton.
Interpreter
Propósito
Definir un intérprete para un lenguaje.
Aplicabilidad
Use el patrón Interpreter cuando la eficiencia no sea un factor tan fundamental, cuando haya que interpretar un lenguaje sencillo, cuando la solución de un problema consiga ser formulada en ese lenguaje.
Implementación
El patrón Interpreter necesita de los siguientes elementos:
• Expression: La interfaz a travçes de la cual el cliente interactçua con las expresiones.
• TerminalExpression: La implementaciçon de la interfaz Expression para nodos terminales en la gramçatica y el carbol de sintaxis.
• NonTerminalExpression: La otra implementación de la interfaz Expression para nodos no terminales de la gramática y el árbol de sintaxis.
• Context: El contenedor de la informaciçon que se necesita en distintos lugares del interpreter.
• Cliente: Construye o destruye o recibe una intancia de un árbol de sintaxis abstracta.
Ventajas e Inconvenientes
Se puede cambiar de forma cómoda el intérprete para reflejar los cambios en la gramática, además las expresiones son reutilizables para otros fines. Se pueden añadir métodos a la interfaz para ampliar la funcionalidad de las expresiones.
Use el patrón Interpreter cuando la gramática es muy grande y pueda ser difícil implantar el árbol de la sintaxis ya que no esta definido en el patrón.
Patrones Relacionados
• Composite: La forma de las expresiones interpretadas se basa en Composite usando nodos y hojas, y nodos rama.
• Flyweight: Se puede emplear en algunas de las expresiones, para disminuir la cantidad de objetos similares.
• Iterator: Se implementa para recorrer el árbol de sintaxis y sus nodos.
• Visitor: Cuando este patrón se implementa Interpreter adquiere flexibilidad.
Definir un intérprete para un lenguaje.
Aplicabilidad
Use el patrón Interpreter cuando la eficiencia no sea un factor tan fundamental, cuando haya que interpretar un lenguaje sencillo, cuando la solución de un problema consiga ser formulada en ese lenguaje.
Implementación
El patrón Interpreter necesita de los siguientes elementos:
• Expression: La interfaz a travçes de la cual el cliente interactçua con las expresiones.
• TerminalExpression: La implementaciçon de la interfaz Expression para nodos terminales en la gramçatica y el carbol de sintaxis.
• NonTerminalExpression: La otra implementación de la interfaz Expression para nodos no terminales de la gramática y el árbol de sintaxis.
• Context: El contenedor de la informaciçon que se necesita en distintos lugares del interpreter.
• Cliente: Construye o destruye o recibe una intancia de un árbol de sintaxis abstracta.
Ventajas e Inconvenientes
Se puede cambiar de forma cómoda el intérprete para reflejar los cambios en la gramática, además las expresiones son reutilizables para otros fines. Se pueden añadir métodos a la interfaz para ampliar la funcionalidad de las expresiones.
Use el patrón Interpreter cuando la gramática es muy grande y pueda ser difícil implantar el árbol de la sintaxis ya que no esta definido en el patrón.
Patrones Relacionados
• Composite: La forma de las expresiones interpretadas se basa en Composite usando nodos y hojas, y nodos rama.
• Flyweight: Se puede emplear en algunas de las expresiones, para disminuir la cantidad de objetos similares.
• Iterator: Se implementa para recorrer el árbol de sintaxis y sus nodos.
• Visitor: Cuando este patrón se implementa Interpreter adquiere flexibilidad.
Iterator
Propósito
Suministrar una manera lógica de acceder de forma secuencial a los elementos existentes en una colección sin importar el tipo de colección.
Aplicabilidad
Use el patrón Iterator cuando necesite admitir el recorrido de muchas colecciones, dejando que diversos clientes indaguen al mismo tiempo por dicha colección, cuando necesite aportar una manera análoga, logia e independiente de su implementación paráis poder recorrer la colección.
Implementación
El patrón Iterator necesita de los siguientes elementos:
• Iterator: En esta interfaz se definen los métodos estándar de iteración.
• ConcreteIterator: Clases que implementan la interfaz Iterator. Estas clases referencian la colección subyacente.
• Aggregate: Esta interfaz define un método de fabricación para generar un iterador.
• ConcreteAggregate: Esta clase implementa la interfaz Aggregate, construyendo objetos ConcreteIterator bajo demanda.
Ventajas e Inconvenientes
Define una interfaz única para recorrer una colección aportándole dinamismo al proceso, permiten tener muchos puntos de navegación para la misma colección.
El mayor inconveniente es que crean la ilusión de estructuras con orden o en otros casos con desorden.
Patrones Relacionados
• Factory Method: En las clases que simbolizan colecciones comúnmente se define un método fábrica para así crear el iterador.
• Visitor: Cuando este patrón se usa en conjuntos de objetos, casi siempre se usa un iterador para recorrer los elementos.
Suministrar una manera lógica de acceder de forma secuencial a los elementos existentes en una colección sin importar el tipo de colección.
Aplicabilidad
Use el patrón Iterator cuando necesite admitir el recorrido de muchas colecciones, dejando que diversos clientes indaguen al mismo tiempo por dicha colección, cuando necesite aportar una manera análoga, logia e independiente de su implementación paráis poder recorrer la colección.
Implementación
El patrón Iterator necesita de los siguientes elementos:
• Iterator: En esta interfaz se definen los métodos estándar de iteración.
• ConcreteIterator: Clases que implementan la interfaz Iterator. Estas clases referencian la colección subyacente.
• Aggregate: Esta interfaz define un método de fabricación para generar un iterador.
• ConcreteAggregate: Esta clase implementa la interfaz Aggregate, construyendo objetos ConcreteIterator bajo demanda.
Ventajas e Inconvenientes
Define una interfaz única para recorrer una colección aportándole dinamismo al proceso, permiten tener muchos puntos de navegación para la misma colección.
El mayor inconveniente es que crean la ilusión de estructuras con orden o en otros casos con desorden.
Patrones Relacionados
• Factory Method: En las clases que simbolizan colecciones comúnmente se define un método fábrica para así crear el iterador.
• Visitor: Cuando este patrón se usa en conjuntos de objetos, casi siempre se usa un iterador para recorrer los elementos.
Mediator
Propósito
Define un objeto que encapsula cómo interaccionan un conjunto de objetos. Favorece un bajo acoplamiento, liberando a los objetos de referenciarse unos a otros explícitamente, y permite variar la interacción de manera independiente.
Aplicabilidad
Use el patrón Mediator cuando un conjunto de objetos se comunica entre sí de una forma bien definida, pero compleja. Las interdependencias son poco estructuradas y difíciles de comprender, cuando reutilizar una clase es difícil porque tiene dependencias con muchas otras clases, cuando un comportamiento que es distribuido entre varias clases debería ser adaptable sin crear muchas subclases.
Implementación
El patrón Mediator necesita de los siguientes elementos:
• Mediator: Define una interface para comunicarse con los objetos colegas.
• ConcreteMediator: Implementa el comportamiento cooperativo entre los colegas (como se comunican entre ellos). Además los conoce y mantiene.
• Colleagues: Cada colega conoce su mediador, y usa a este para comunicarse con otros colegas.
Ventajas e Inconvenientes
Evita crear subclases de los colegas, sólo se crean subclases del mediador, además desacopla a los colegas.
Simplifica los protocolos entre las clases y abstrae el cómo cooperan los objetos, centraliza el control en el mediador, por lo tanto la clase es difícil de mantener.
Patrones Relacionados
• Factory Method: En las clases que simbolizan colecciones comúnmente se define un método fábrica para así crear el iterador.
• Visitor: Cuando este patrón se usa en conjuntos de objetos, casi siempre se usa un iterador para recorrer los elementos.
Define un objeto que encapsula cómo interaccionan un conjunto de objetos. Favorece un bajo acoplamiento, liberando a los objetos de referenciarse unos a otros explícitamente, y permite variar la interacción de manera independiente.
Aplicabilidad
Use el patrón Mediator cuando un conjunto de objetos se comunica entre sí de una forma bien definida, pero compleja. Las interdependencias son poco estructuradas y difíciles de comprender, cuando reutilizar una clase es difícil porque tiene dependencias con muchas otras clases, cuando un comportamiento que es distribuido entre varias clases debería ser adaptable sin crear muchas subclases.
Implementación
El patrón Mediator necesita de los siguientes elementos:
• Mediator: Define una interface para comunicarse con los objetos colegas.
• ConcreteMediator: Implementa el comportamiento cooperativo entre los colegas (como se comunican entre ellos). Además los conoce y mantiene.
• Colleagues: Cada colega conoce su mediador, y usa a este para comunicarse con otros colegas.
Ventajas e Inconvenientes
Evita crear subclases de los colegas, sólo se crean subclases del mediador, además desacopla a los colegas.
Simplifica los protocolos entre las clases y abstrae el cómo cooperan los objetos, centraliza el control en el mediador, por lo tanto la clase es difícil de mantener.
Patrones Relacionados
• Factory Method: En las clases que simbolizan colecciones comúnmente se define un método fábrica para así crear el iterador.
• Visitor: Cuando este patrón se usa en conjuntos de objetos, casi siempre se usa un iterador para recorrer los elementos.
Memento
Propósito
Captura y externaliza el estado interno de un objeto, sin violar la encapsulación, de modo que el objeto puede ser restaurado a este estado más tarde.
Aplicabilidad
Use el patrón Memento cuando una parte del estado de un objeto debe ser guardado para que pueda ser restaurado más tarde y una interfaz para obtener el estado de un objeto podría romper la encapsulación exponiendo detalles de implementación.
Implementación
El patrón Memento necesita de los siguientes elementos:
• Memento: Almacena el estado interno de un objeto Originator. El Memento puede almacenar todo 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 o restaurar su estado interno, sólo Originator debería acceder a esta interfaz.
• Originator: Originator crea un objeto Memento conteniendo una fotografía de su estado interno. Originator usa a Memento para restaurar su estado interno.
• Caretaker: Es responsable por mantener a salvo a Memento.No opera o examina el contenido de Memento.
Ventajas e Inconvenientes
Mantiene la encapsulación. Simplifica la clase Creador ya que no debe preocuparse de mantener las versiones del estado interno
Podría incurrir en un considerable gasto de memoria: encapsular y restaurar el estado no debe ser costoso, puede ser difícil en algunos lenguajes asegurar que sólo el Creador tenga acceso al estado del Memento.
Patrones Relacionados
• Command: Utiliza Mementos para registrar el estado de las acciones que no se pueden deshacer.
• State: La mayoría de los estados usan Memento.
Captura y externaliza el estado interno de un objeto, sin violar la encapsulación, de modo que el objeto puede ser restaurado a este estado más tarde.
Aplicabilidad
Use el patrón Memento cuando una parte del estado de un objeto debe ser guardado para que pueda ser restaurado más tarde y una interfaz para obtener el estado de un objeto podría romper la encapsulación exponiendo detalles de implementación.
Implementación
El patrón Memento necesita de los siguientes elementos:
• Memento: Almacena el estado interno de un objeto Originator. El Memento puede almacenar todo 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 o restaurar su estado interno, sólo Originator debería acceder a esta interfaz.
• Originator: Originator crea un objeto Memento conteniendo una fotografía de su estado interno. Originator usa a Memento para restaurar su estado interno.
• Caretaker: Es responsable por mantener a salvo a Memento.No opera o examina el contenido de Memento.
Ventajas e Inconvenientes
Mantiene la encapsulación. Simplifica la clase Creador ya que no debe preocuparse de mantener las versiones del estado interno
Podría incurrir en un considerable gasto de memoria: encapsular y restaurar el estado no debe ser costoso, puede ser difícil en algunos lenguajes asegurar que sólo el Creador tenga acceso al estado del Memento.
Patrones Relacionados
• Command: Utiliza Mementos para registrar el estado de las acciones que no se pueden deshacer.
• State: La mayoría de los estados usan Memento.
Suscribirse a:
Comentarios (Atom)