Comportamiento
Cómo interactúan los objetos y cómo se reparten responsabilidades.
Los patrones de comportamiento se ocupan de los algoritmos y de la asignación de responsabilidades entre objetos. Su foco está en la comunicación: quién le habla a quién, cuándo y con qué contrato.
#Por qué son los más usados en la práctica
La mayor parte del código que se escribe hoy está más interesado en flujos que en estructuras: un evento que dispara un handler, una estrategia que se elige en runtime, una máquina de estados que cambia el comportamiento de un objeto. Los patrones de comportamiento son el idioma natural para describir todo eso.
#Cuándo encajan
- El mismo input puede procesarse de varias formas según el contexto (
Strategy). - Querés desacoplar el emisor de un mensaje del receptor (
Observer,Mediator). - Una operación atraviesa varios pasos que pueden cancelar o pasar al siguiente (
Chain of Responsibility). - El comportamiento del objeto depende de su estado interno (
State). - Querés encapsular una acción para deshacerla, encolarla o auditarla (
Command).
#Cuándo NO los uses
- Visitor solo paga si la jerarquía es estable y las operaciones cambian seguido.
- Mediator puede convertirse en una clase Dios si no le ponés límites.
- Observer sin orden explícito explica el 80% de los bugs de "esto se dispara dos veces".
#En este capítulo
Los 11 clásicos: Chain of Responsibility, Command, Iterator, Mediator,
Memento, Observer (con su variante reactiva), State, Strategy,
Template Method y Visitor.
- Chain of Responsibility — Pasa una solicitud por una cadena de manejadores hasta que uno la procesa.
- Command — Encapsula una solicitud como un objeto, permitiendo parametrizar, encolar, registrar y deshacer.
- Iterator — Recorre los elementos de una colección sin exponer su representación interna.
- Mediator — Define un objeto que encapsula cómo interactúan un conjunto de objetos, reduciendo el acoplamiento entre ellos.
- Memento — Captura y restaura el estado interno de un objeto sin violar su encapsulación.
- Observer — Define una dependencia uno-a-muchos para notificar a múltiples objetos cuando uno cambia.
- State — Permite a un objeto cambiar de comportamiento al cambiar su estado interno; parece cambiar de clase.
- Strategy — Define una familia de algoritmos, los encapsula y los hace intercambiables.
- Template Method — Define el esqueleto de un algoritmo en una clase base, dejando ciertos pasos a las subclases.
- Visitor — Permite añadir nuevas operaciones a estructuras de objetos sin modificar sus clases.
- Pipeline — Procesa una solicitud mediante manejadores que le aplican propiedades de manera progresiva.