DotNetAge - Mvc & jQuery CMS
Hide sidebar

Prototype


Definition


Specify the kind of objects to create using a prototypical instance, and create new objects by copying this prototype.

UML class diagram


Prototype

Participants


The classes and/or objects participating in this pattern are:

  • Prototype - declares an interface for cloning itself
  • ConcretePrototype - implements an operation for cloning itself
  • Client - creates a new object by asking a prototype to clone itself

Sample code in C#



/// <summary>
/// MainApp startup class for Structural
/// Prototype Design Pattern.
/// </summary>
class MainApp
{
/// <summary>
/// Entry point into console application.
/// </summary>
static void Main()
{
// 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();
}
}

/// <summary>
/// The 'Prototype' abstract class
/// </summary>
public 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();
}


/// <summary>
/// A 'ConcretePrototype' class
/// </summary>
public class ConcretePrototype1 : Prototype
{

// Constructor
public ConcretePrototype1(string id) : base(id)
{
}

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

/// <summary>
/// A 'ConcretePrototype' class
/// </summary>
public class ConcretePrototype2 : Prototype
{

// Constructor
public ConcretePrototype2(string id) : base(id)
{
}

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

 


    Average:
  • Reads
    (1060)
  • Permalink
Share to: Add to del.icio.us Digg! Share on Google Buzz Share on Facebook Reddit! Stumble it! Share on Twitter

Tag cloud

Anything in here will be replaced on browsers that support the canvas element