Patrón Prototype
El patrón Prototype crea nuevos objetos copiando un objeto existente (el prototipo). Úsalo cuando la creación de objetos es costosa y ya existe un objeto similar: clonar es más rápido y conveniente que instanciar desde cero.
Resumen
El patrón Prototype produce nuevos objetos clonando una instancia preconstruida — el prototipo — en lugar de pasar por un constructor. Es útil cuando construir el objeto es costoso (llamadas de red, parseo pesado) o cuando la configuración que produjo el original es complicada y quieres reutilizarla.
Cuándo usarlo
- Construir un objeto desde cero es costoso pero copiar uno existente es barato.
- Necesitas muchas variaciones del mismo objeto base y no quieres repetir su lógica de construcción.
- Los detalles de la clase concreta deben permanecer ocultos — los clientes clonan una instancia conocida en vez de cablear una.
Ejemplo
interface Cloneable<T> { clone(): T }
class Shape implements Cloneable<Shape> {
constructor(public x: number, public y: number, public color: string) {}
clone(): Shape {
return new Shape(this.x, this.y, this.color);
}
}
const original = new Shape(10, 20, "red");
const copy = original.clone();
copy.x = 99;
console.log(original.x, copy.x); // 10 99Ventajas
- Evita configuración costosa copiando una instancia ya inicializada.
- Oculta las clases concretas detrás de un método `clone()` — los clientes no dependen de constructores.
- Favorece la composición: arma un registro de prototipos y clona el que necesites.
Desventajas
- Hacer deep copy de objetos con referencias circulares o recursos compartidos es complicado.
- Cada clase del grafo debe implementar el clone correctamente — es fácil olvidar un campo.
- Pierdes la explicitud de una firma de constructor.