Definición:

Define el tipo de objeto a crear basandose en una intancia prototipo y crea un nuevo objeto realizando una copia de la misma.

Participantes:

Prototype : declara una interfaz que permitira su clonarse a si misma
ConcretePrototype : implementa la operacion para clonarse a si misma.
Client  : crea un objeto pidiendole al prototype clonarse a si mismo.

Este patrón  de nuevo nos presenta una solución a un problema ya conocido el hecho de dejar en manos de una subclase la implementacion de un comportamiento que podría cambiar dinamicamente, en este caso el patrón prototipe se vale de una clase Prototype para presentar una interfaz que sera desarrollada luego por clases ConcretePrototype .

Es normal usar este patron cuando se necesitan añadir y remover clases en tiempo de ejecución, esto lo vuelve muy flexible entre los patrones creacionales .

Entre las formas que tenemos para clonar objetos en .Net tenemos el método MemberwiseClone el cual crea una copia superficial mediante la creación de un nuevo objeto y la copia posterior de los campos no estáticos del objeto actual en el objeto nuevo.

Al usar MemberwiseClone() si un campo es un tipo de valor, se realiza una copia bit a bit del campo. Si un campo es un tipo de referencia, se copia la referencia pero no el objeto al que se hace referencia; por consiguiente, el objeto original y su copia hacen referencia al mismo objeto.

class ConcretePrototype2 : Prototype

{

// Constructor

public ConcretePrototype2(string id)

: base(id)

{

}

// Returns a shallow copy

public override Prototype Clone()

{

return (Prototype)this.MemberwiseClone();

}

}

Aquí pueden descargar las clases en C# creadas con el Visual Studio 2008

Aquí pueden descargar el diagrama de clases realizado en el PowerDesigner