Prototype tiene un objeto que se utiliza como base para crear una nueva instancia con los mismos valores. Proporcionar un "crear en base al estado existente" este comportamiento permite a los programas realizar operaciones como impulsado por los usuarios a copiar, y para inicializar los objetos a un estado que se ha establecido a través del uso del sistema. Esto es a menudo preferible a inicializar el objeto con un conjunto genérico de algunos valores.
Características generales de este patrón:
Nombre:
Prototype.
Propósito:
El objetivo de este patrón es especificar los tipos de objetos a crear por medio de una instancia que hace de prototipo, creando nuevos objetos copiando dicha instancia.
Aplicabilidad:
Este patrón se utiliza generalmente cuando:
· Las clases a instanciar sean especificadas en tiempo de ejecución.
· Para evitar construir una jerarquía de clases de fábricas paralela a la jerarquía de clases de producto.
· Cuando las instancias de una clase puedan tener uno de entre sólo unos pocos estados diferentes.
Estructura:

· Prototype: Declara una interfaz para clonarse.
· ConcretePrototype: Implementa una operación para clonarse.
· Cliente: Crea un nuevo objeto pidiéndole a un prototype que se clone.
Implementación:
· Usar un gestor de prototype: Cuando el número de prototypes no es fijo (cuando pueden ser creados y destruidos dinámicamente).
· Implementar la operación Clone.
· Inicializar los clones (Personalizarlos).
Colaboraciones:
· Un cliente solicita a un prototype que se clone a si mismo.
Consecuencias:
· Se pueden agregar y eliminar productos en tiempo de ejecución.
· Permite configurar una aplicación con clases dinámicamente.
· Especificar nuevos objetos modificando valores.
· Especificar nuevos objetos variando la estructura.
Patrones relacionados:
· Abstract factory.
· Factory method.
Etiquetas: Creational patterns, Patrones Creacionales, Prototype