En este último grupo se encuentran la mayoría de los patrones, y se usan para gestionar algoritmos, relaciones y responsabilidades entre objetos.
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.
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.
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
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.
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.
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).
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.
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.