Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Patrones de Diseño Creacionales

Prototype

Clonar objetos existentes

Universidad Nacional de Rio Negro - Sede Andina

Definición

El patrón Prototype (Prototipo) es un patrón de diseño creacional que permite la creación de nuevos objetos a partir de un objeto existente (el prototipo) mediante la clonación. En lugar de instanciar la clase desde cero, el cliente solicita al prototipo que cree una copia de sí mismo.

Origen e Historia

Documentado por el GoF en 1994, el patrón Prototype tiene raíces en lenguajes como Self, donde la clonación de objetos es el mecanismo principal de herencia y creación (en lugar de clases). En Java, este patrón está integrado en el lenguaje a través de la interfaz Cloneable y el método clone(), aunque su implementación requiere cuidado con la clonación profunda.

Motivacion

La motivación principal es evitar el costo de creación de objetos complejos cuando ya existe una instancia configurada.

// Sin Prototype: Re-configurar cada instancia es ineficiente
Configuracion c1 = new Configuracion();
c1.cargarDeBD(); // Proceso costoso
c1.setModulos(...);

Configuracion c2 = new Configuracion();
c2.cargarDeBD(); // ❌ Repetir proceso costoso

Con Prototype, c2 simplemente se clonaría de c1, heredando todo su estado ya inicializado.

Contexto

Se aplica cuando:

Cuando aplica

Cuando no aplica

Consecuencias de su uso

Positivas

Negativas

Alternativas

Estructura

Diagramas

Diagrama de Clases

Diagrama de Secuencia

Ejemplos

/**
 * Interfaz Prototype.
 */
public interface Cloneable {
    Object clonar();
}

/**
 * Clase que implementa clonación.
 */
public class Documento implements Cloneable {
    private String titulo;
    private List<String> etiquetas;
    
    public Documento(String titulo) {
        this.titulo = titulo;
        this.etiquetas = new ArrayList<>();
    }
    
    // Constructor de copia (Recomendado sobre clone() de Java)
    private Documento(Documento original) {
        this.titulo = original.titulo;
        this.etiquetas = new ArrayList<>(original.etiquetas); // Clonación profunda de la lista
    }
    
    @Override
    public Documento clonar() {
        return new Documento(this);
    }
}

Ejercicios

Resumen

El patrón Prototype es el patrón del “copiar y pegar”. Su valor reside en la eficiencia y en la capacidad de crear variantes de objetos complejos sin depender de sus clases concretas ni de pesados procesos de inicialización. Es la base de los sistemas de prototipado donde los objetos evolucionan por copia y modificación.

Próximo paso

Para seguir, conviene pasar a el material siguiente, donde el recorrido continúa sobre esta base.