Nivel 2 · 25 min
Patrones de Comportamiento
Los patrones de comportamiento definen cómo los objetos interactúan y distribuyen responsabilidades entre sí. Resuelven la comunicación entre objetos de forma desacoplada. Los más importantes para entrevistas son: Observer, Strategy, State, Template Method y Command.
Observer y Strategy
Observer define una dependencia uno-a-muchos entre objetos — cuando uno cambia, todos sus dependientes son notificados. Es la base de los event listeners, sistemas reactivos y data binding en UI. Strategy encapsula una familia de algoritmos intercambiables. En lugar de if/else o switch para elegir comportamiento, inyectás la estrategia. Útil para sorting, pricing, routing, validación — cualquier algoritmo que varía.
State y Template Method
State permite que un objeto cambie su comportamiento cuando su estado interno cambia — parece que cambiara su clase. Cada estado concreto implementa la misma interfaz y el contexto delega en el estado actual. Template Method define el esqueleto de un algoritmo en una clase base y deja que las subclases implementen pasos específicos. Es el opuesto de Strategy: usa herencia en lugar de composición.
Command e Iterador
Command encapsula una solicitud como un objeto, permitiendo parametrizar clientes, hacer queue de requests, implementar undo/redo y logging de operaciones. Cada comando tiene execute() y opcionalmente undo(). Iterador proporciona una forma de acceder secuencialmente a los elementos de una colección sin exponer su representación interna — Iterable/Iterator en Java es la implementación canónica.
Code example
// Strategy: ordenamiento intercambiable
interface SortStrategy { void sort(List<Item> items); }
class PriceAscStrategy implements SortStrategy { ... }
class PopularityStrategy implements SortStrategy { ... }
class ProductCatalog {
private SortStrategy strategy;
void setStrategy(SortStrategy s) { this.strategy = s; }
List<Item> getSorted(List<Item> items) {
strategy.sort(items); return items;
}
}