Vous êtes sur la page 1sur 13

TRABAJO DE DIPLOMA I

PROTOTYPE
Prototipo

Titular: Dario Guillermo Cardacci

PROTOTYPE (Prototipo) Titular: Dario G. Cardacci
Propsito
Especifica los tipos de objetos a crear por medio de una
instancia prototpica, y crea nuevos objetos copiando
dicho prototipo.
Aplicabilidad
Cuando las clases a instancias sean especificadas en tiempo de
ejecucin.
Para evitar construir una jerarqua de clases de fbricas paralela a
la jerarqua de clases de los productos.
Cuando las instancias de una clase puedan tener uno de entre
slo unos pocos estados diferentes.
PROTOTYPE (Prototipo) Titular: Dario G. Cardacci
Estructura
class Class Model
Prototype
+ Cl one()
ConcretePrototype1
+ Cl one()
return copy of
sel f
ConcretePrototype2
+ Cl one()
return copy of
sel f
Client
+ Operati on()
p =
prototype->Cl one()
-prototype
PROTOTYPE (Prototipo) Titular: Dario G. Cardacci
Participantes
Prototipo
Declara una interfaz para clonarse.
Prototipo Concreto
Implementa una operacin para clonarse.
Cliente
Crea un nuevo objeto pidindole a un prototipo que se clone.
PROTOTYPE (Prototipo) Titular: Dario G. Cardacci
Colaboraciones
Un Cliente le pide a un prototipo que se clone.
PROTOTYPE (Prototipo) Titular: Dario G. Cardacci
Consecuencias
Aadir y eliminar productos en tiempo de ejecucin.
Permite incorporar a un sistema una nueva clase concreta de
producto registrando una instancia prototpica con el cliente.
Especificar nuevos objetos modificando valores.
Podemos definir nuevos tipos de objetos creando instancias de
clases existentes y registrando a estas como prototipos de los
objetos Clientes.
Especificar nuevos objetos variando la estructura.
Permite manejar estructuras de partes y subpartes, utilizando
prototipos de un grupo de prototipos disponibles.
PROTOTYPE (Prototipo) Titular: Dario G. Cardacci
Consecuencias
Reduce la Herencia.
Permite clonar un prototipo en vez de decirle a un mtodo de
fabricacin que se cree un nuevo objeto.
Configurar dinmicamente una aplicacin con clases.
Algunos entornos de tiempo de ejecucin permite cargar clases en
una aplicacin dinmicamente. Una aplicacin que quiere crear
instancias de una clase cargada dinmicamente no podr hacer
referencia al constructor de este estticamente, en su lugar el
entorno en tiempo de ejecucin crea automticamente una
instancia de cada clase cada vez que es cargada y la registra con un
gestor de prototipo.
PROTOTYPE (Prototipo) Titular: Dario G. Cardacci
Cdigo Fuente - Ejemplo
Clase Prototipo
abstract class Prototype
{
private string _id;

// Constructor
public Prototype(string id)
{
this._id = id;
}

// Gets id
public string Id
{
get { return _id; }
}

public abstract Prototype Clone();
}
PROTOTYPE (Prototipo) Titular: Dario G. Cardacci
Cdigo Fuente - Ejemplo
Clase Prototipo Concreto 1
PROTOTYPE (Prototipo) Titular: Dario G. Cardacci
/// <summary>
/// A 'ConcretePrototype' class
/// </summary>
class ConcretePrototype1 : Prototype
{
// Constructor
public ConcretePrototype1(string id)
: base(id)
{
}

// Returns a shallow copy
public override Prototype Clone()
{
return (Prototype)this.MemberwiseClone();
}
}
Cdigo Fuente - Ejemplo
Clase Prototipo Concreto 2
PROTOTYPE (Prototipo) Titular: Dario G. Cardacci
/// <summary>
/// A 'ConcretePrototype' class
/// </summary>
class ConcretePrototype2 : Prototype
{
// Constructor
public ConcretePrototype2(string id)
: base(id)
{
}

// Returns a shallow copy
public override Prototype Clone()
{
return (Prototype)this.MemberwiseClone();
}
}

Cdigo Fuente - Ejemplo
Main
PROTOTYPE (Prototipo) Titular: Dario G. Cardacci
// Create two instances and clone each

ConcretePrototype1 p1 = new ConcretePrototype1("I");
ConcretePrototype1 c1 = (ConcretePrototype1)p1.Clone();
Console.WriteLine("Cloned: {0}", c1.Id);

ConcretePrototype2 p2 = new ConcretePrototype2("II");
ConcretePrototype2 c2 = (ConcretePrototype2)p2.Clone();
Console.WriteLine("Cloned: {0}", c2.Id);

// Wait for user
Console.ReadKey();
FIN
PROTOTYPE (Prototipo) Titular: Dario G. Cardacci

Vous aimerez peut-être aussi