Prototype
El prototipo es un patrón de diseño creacional
que permite la clonación de objetos, incluso los más
complejos, sin acoplarse a sus clases específicas.
Además, existen muchos objetos con atributos privados,
este patrón permite que se copien sin necesidad de acceder ellos.
El patrón Prototype está disponible en Java con una Cloneable
interfaz.
Al clonar un objeto se debe tener cuidado de clonar sus atributos
que sean por referencia, ya que sino ambos clones apuntaran al mismo atributo.
En el ejemplo asumimos que existen formas (shapes) que se dibujan en un canvas, y se quiere dar la funcionalidad de copiar y pegar. Se utiliza este patrón para poder clonar un shape y que su clon tenga todos sus atributos.
Ejemplo de uso:
Square square = new Square();
square.setWidth(100);
square.setHeight(100);
square.setX(20);
square.setY(20);
square.setColor(Color.BLACK);
System.out.printf("Original object: %s, new object: %s\n", square, square.clone()); // Salida ejemplo: Original object: pattern.creational.prototype.Square@39a054a5, new object: pattern.creational.prototype.Square@71bc1ae4