Creacionales
Cómo se crean los objetos, ocultando la lógica de instanciación.
Los patrones creacionales abstraen el proceso de instanciación. En lugar de tener
new Foo() desperdigado por todo el código, centralizan la decisión de qué crear
y cómo crearlo, dejando al cliente trabajar con interfaces o tipos abstractos.
#Por qué importan
En un sistema chico, new está bien. Pero a medida que crece, los new directos
terminan acoplando consumidores a clases concretas, escondiendo dependencias y
volviendo dolorosos los tests. Los patrones creacionales mueven esa decisión a un
único lugar reemplazable.
#Cuándo encajan
- La creación requiere varios pasos, validaciones o configuración externa.
- Querés que el código cliente dependa de abstracciones, no de tipos concretos.
- La familia de objetos a instanciar puede variar (por entorno, por tenant, por feature flag).
- Necesitás controlar el ciclo de vida (uno solo, pool, prototipos clonables).
#Cuándo NO los uses
- Si solo tenés una clase y nunca va a haber otra, una factory es ceremonia inútil.
- Singleton en particular se abusa: muchas veces lo que querés es inyectar una dependencia, no globalizarla.
#En este capítulo
- Singleton — una sola instancia compartida (con sus variantes thread-safe).
- Factory Method — delegar la creación a subclases.
- Abstract Factory — familias de objetos relacionados.
- Builder — construcción paso a paso de objetos complejos (con Director y Step Builder).
- Prototype — clonar en lugar de construir desde cero.
Tip: si dudás entre Factory Method y Abstract Factory, empezá por el primero. Subir a Abstract Factory es trivial; bajar es doloroso.
- Singleton — Garantiza que una clase tenga una única instancia y proporciona un punto de acceso global a ella.
- Factory Method — Define una interfaz para crear un objeto, pero deja que las subclases decidan qué clase instanciar.
- Abstract Factory — Crea familias de objetos relacionados sin especificar sus clases concretas.
- Builder — Construye objetos complejos paso a paso, separando el algoritmo de construcción de su representación.
- Prototype — Crea nuevos objetos clonando una instancia existente, evitando depender de sus clases concretas.