💡 Ver Caso Práctico: Ejemplo Práctico del Patrón Prototype
Prototype es un patrón de diseño creacional que permite copiar objetos existentes sin que el código dependa de sus clases concretas, delegando la lógica de clonación al propio objeto.
Propósito y Caso de Uso
Utiliza Prototype cuando crear un objeto desde cero sea costoso (consultas a base de datos, cálculos pesados, configuración compleja) y ya tengas una instancia similar disponible que solo requiere pequeños ajustes. También es útil cuando quieres evitar una jerarquía paralela de fábricas (Factory Method) solo para producir copias.
Estructura del Patrón
- Prototipo (Interfaz): Declara el método
clone(). - Prototipo Concreto: Implementa
clone(), copiando sus propios campos (incluyendo copia profunda de objetos anidados si aplica). - Cliente: Solicita una copia a un prototipo existente en lugar de instanciar
newdirectamente.
Flujo de Funcionamiento
- Solicitud: El cliente llama a
clone()sobre un objeto prototipo ya configurado. - Copia: El objeto crea una nueva instancia de sí mismo, copiando sus valores actuales (copia profunda cuando hay estructuras anidadas mutables).
- Personalización: El cliente ajusta solo los campos que difieren de la copia, sin repetir la configuración común.
Ejemplos de Implementación Reales
interface Prototype<T> {
clone(): T;
}
class DocumentTemplate implements Prototype<DocumentTemplate> {
constructor(
public header: string,
public footer: string,
public sections: string[] = []
) {}
clone(): DocumentTemplate {
// Copia profunda del array para no compartir referencia
return new DocumentTemplate(this.header, this.footer, [...this.sections]);
}
}
// Prototipo base ya configurado con branding corporativo
const baseInvoice = new DocumentTemplate('Manu Prieto S.L.', 'Gracias por su compra', ['Datos del cliente']);
// Clonamos en lugar de reconstruir el header/footer cada vez
const marchInvoice = baseInvoice.clone();
marchInvoice.sections.push('Detalle Marzo 2026');
console.log(baseInvoice.sections.length); // 1 (no afectado por el clon)Cuándo NO usarlo
Si construir el objeto es barato y no comparte configuración con otros, clonar añade complejidad de copia profunda innecesaria (YAGNIGlosarioYAGNI (You Aren't Gonna Need It)Principio de Extreme Programming (XP) que establece que un programador no debe añadir funcionalidad hasta que sea estrictamente necesario. Su objetivo es evitar la sobre-ingeniería (over-engineering), previniendo código para funcionalidades hipotéticas.Ver término completo →); usa un constructor normal o Factory Method.