Café y Código

4. Patrones de comportamiento

Tratan la asignación de responsabilidades y los algoritmos entre objetos: comunicación, estados, notificaciones, recorridos, deshacer, variaciones de lógica sin herencia rígida, etc.

Catálogo en Refactoring.Guru ↗

Chain of Responsibility (Refactoring.Guru ↗)

Pasa un mensaje por una cadena de manejadores hasta que uno lo procesa o se agota la cadena.

Ejemplo ilustrativo — Chain of Responsibility
JAVA
1 abstract class Manejador {
2 Manejador siguiente;
3 void setSig(Manejador s) { siguiente = s; }
4 abstract void manejar(int x);
5 }

Command (Refactoring.Guru ↗)

Encapsulas una solicitud como objeto para parametrizar, encolar, deshacer o registrar acciones.

Ejemplo ilustrativo — Command
JAVA
1 interface Comando { void ejecutar(); }
2 class Boton {
3 Comando cmd;
4 void click() { cmd.ejecutar(); }
5 }

Iterator (Refactoring.Guru ↗)

Recorres una colección sin exponer su representación interna.

Ejemplo ilustrativo — Iterator
JAVA
1 interface Iterador<T> { boolean haySiguiente(); T siguiente(); }
2 class Coleccion {
3 Iterador<String> iterador() { /* ... */ return null; }
4 }

Mediator (Refactoring.Guru ↗)

Los componentes no se llaman entre sí directamente; coordinan a través de un mediador central.

Ejemplo ilustrativo — Mediator
JAVA
1 interface Mediador {
2 void notificar(Object emisor, String evento);
3 }

Memento (Refactoring.Guru ↗)

Guardas y restaura el estado interno de un objeto sin violar su encapsulamiento.

Ejemplo ilustrativo — Memento
JAVA
1 class Memento { final String estado; Memento(String e){ estado=e; } }
2 class Origen {
3 String estado;
4 Memento guardar() { return new Memento(estado); }
5 void restaurar(Memento m) { estado = m.estado; }
6 }

Observer (Refactoring.Guru ↗)

Varios suscriptores reaccionan automáticamente a cambios en un sujeto.

Ejemplo ilustrativo — Observer
JAVA
1 interface Observador { void actualizar(); }
2 class Sujeto {
3 List<Observador> obs = new ArrayList<>();
4 void notificar() { obs.forEach(Observador::actualizar); }
5 }

State (Refactoring.Guru ↗)

El comportamiento cambia cuando el estado interno cambia, a menudo delegando en objetos de estado.

Ejemplo ilustrativo — State
JAVA
1 interface EstadoPuerta { void clic(Puerta p); }
2 class Puerta { EstadoPuerta estado; void clic() { estado.clic(this); } }

Strategy (Refactoring.Guru ↗)

Familia de algoritmos intercambiables bajo una misma interfaz, elegidos en tiempo de ejecución.

Ejemplo ilustrativo — Strategy
JAVA
1 interface Envio { int costo(int kg); }
2 class Carrito {
3 Envio estrategia;
4 int total(int kg) { return estrategia.costo(kg); }
5 }

Template Method (Refactoring.Guru ↗)

Defines el esqueleto de un algoritmo en una clase base y delegas pasos variables a subclases.

Ejemplo ilustrativo — Template Method
JAVA
1 abstract class Informe {
2 final void generar() {
3 encabezado();
4 cuerpo();
5 pie();
6 }
7 abstract void cuerpo();
8 void encabezado() {}
9 void pie() {}
10 }

Visitor (Refactoring.Guru ↗)

Separas operaciones de la estructura de objetos; nuevas operaciones como nuevos “visitantes”.

Ejemplo ilustrativo — Visitor
JAVA
1 interface Visitor { void visit(NodoA a); void visit(NodoB b); }
2 interface Nodo { void accept(Visitor v); }
Ko-fi
Donaciones
Apoyá cafeycodigo con un café en Ko-fi. Colaboradores: insignia, muro y zona exclusiva.