En este último grupo se encuentran la mayoría de los patrones, y se usan para gestionar algoritmos, relaciones y responsabilidades entre objetos.
Command: Son objetos que encapsulan una acción y los parámetros que necesitan para ejecutarse.
Se debe usar cuando:
-Se necesiten colas o registros de mensajes.
-Se deba tener la posibilidad de deshacer las operaciones realizadas.
-Se necesite uniformidad al invocar las acciones.
-Se quiera facilitar la parametrización de las acciones a realizar.
-Se quiera independizar el momento de petición del de ejecución.
-El parámetro de una orden puede ser otra orden a ejecutar.
-Se busque desarrollar sistemas utilizando órdenes de alto nivel que se construyen con operaciones sencillas (primitivas).
-Se necesite sencillez al extender el sistema con nuevas acciones.
Chain of responsibility: se evita acoplar al emisor y receptor de una petición dando la posibilidad a varios receptores de consumirlo. Cada receptor tiene la opción de consumir esa petición o pasárselo al siguiente dentro de la cadena.
Se utiliza cuando:
-Las peticiones emitidas por un objeto deben ser atendidas por distintos objetos receptores.
-No se sabe a priori cual es el objeto que me puede resolver el problema.
-Cuando un pedido debe ser manejado por varios objetos.
-El conjunto de objetos que pueden tratar una petición debería ser especificado dinámicamente.
Se utiliza cuando:
-Las peticiones emitidas por un objeto deben ser atendidas por distintos objetos receptores.
-No se sabe a priori cual es el objeto que me puede resolver el problema.
-Cuando un pedido debe ser manejado por varios objetos.
-El conjunto de objetos que pueden tratar una petición debería ser especificado dinámicamente.
Interpreter: Define una representación para una gramática así como el mecanismo para evaluarla. El árbol de sintaxis del lenguaje se suele modelar mediante el patrón Composite.
Se utiliza cuando:
-Cuando hay un lenguaje que interpretar y se puede interpretar sus palabras como árboles sintácticos abstractos. Para ello, la gramática debe ser simple
Iterator: Se utiliza para poder movernos por los elementos de un conjunto de forma secuencial sin necesidad de exponer su implementación específica.
Se utiliza cuando:
-Una clase necesita acceder al contenido de una colección sin llegar a ser dependiente de la clase que es utilizada para implementar la colección, es decir sin tener que exponer su representación interna.
-Una clase necesita un modo uniforme de acceder al contenido de varias colecciones.
-Cuando se necesita soportar múltiples recorridos de una colección.
Mediator: Objeto que encapsula cómo otro conjunto de objetos interactúan y se comunican entre sí.
Se utiliza cuando:
-Un conjunto grande de objetos se comunica de una forma bien definida, pero compleja.
-Reutilizar un objeto se hace difícil por que se relaciona con muchos objetos.
-Las clases son difíciles de reutilizar porque su función básica esta entrelazada con relaciones de dependencia.
Memento: Este patrón otorga la capacidad de restaurar un objeto a un estado anterior
Se usa cuando:
-Se necesite restaurar el sistema desde estados pasados.
-Se quiera facilitar el hacer y deshacer de determinadas operaciones, para lo que habrá que guardar los estados anteriores de los objetos sobre los que se opere (o bien recordar los cambios de forma incremental).
Observer: Los objetos son capaces de suscribirse a una serie de eventos que otro objetivo va a emitir, y serán avisados cuando esto ocurra.
Se usa cuando:
-Un objeto necesita notificar a otros objetos cuando cambia su estado. La idea es encapsular estos aspectos en objetos diferentes permite variarlos y reutilizarlos independientemente.
-Cuando existe una relación de dependencia de uno a muchos que puede requerir que un objeto notifique a múltiples objetos que dependen de él cuando cambia su estado.
State: Permite modificar la forma en que un objeto se comporta en tiempo de ejecución, basándose en su estado interno.
Se usa cuando:
-El comportamiento de un objeto depende de un estado, y debe cambiar en tiempo de ejecución según el comportamiento del estado.
-Cuando las operaciones tienen largas sentencias con múltiples ramas que depende del estado del objeto.
Strategy: Permite la selección del algoritmo que ejecuta cierta acción en tiempo de ejecución.
Template Method: Especifica el esqueleto de un algoritmo, permitiendo a las subclases definir cómo implementan el comportamiento real.
Visitor: Permite separar el algoritmo de la estructura de datos que se utilizará para ejecutarlo. De esta forma se pueden añadir nuevas operaciones a estas estructuras sin necesidad de modificarlas.