1、结构图
2、代码
/**************************************************************************
* 意图:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
*
* 适用性:
* 1、当要实例化的类是在运行时刻指定时,例如,通过动态装载;或者
* 2、为了避免创建一个与产品类层次平行的工厂类层次时;或者
* 3、当一个类的实例只能有几个不同状态组合中的一种时。建立相应数目的原型
* 并克隆它们可能比每次用合适的状态手工实例化该类更方便一些。
*
* 协作:客户请求一个原型克隆自身。
*
* 作者:董怀信
* 日期:2009-05-27
* ************************************************************************/
using System;
namespace DesignPattern.CreationalPattern
{
/// <summary>
/// 声明一个克隆自身的接口。
/// </summary>
public abstract class Prototype
{
public abstract Prototype Clone();
public abstract void DoSomething();
}
/// <summary>
/// 实现一个克隆自身的操作。
/// </summary>
public class ConcretePrototype1 : Prototype
{
public override Prototype Clone()
{
return new ConcretePrototype1();
}
public override void DoSomething()
{
Console.WriteLine("ConcretePrototype1:DoSomething;");
}
}
public class ConcretePrototype2 : Prototype
{
public override Prototype Clone()
{
return new ConcretePrototype2();
}
public override void DoSomething()
{
Console.WriteLine("ConcretePrototype2:DoSomething;");
}
}
/// <summary>
/// 用一个原型克隆自身从而创建一个新的对象。
/// </summary>
public class Client
{
private Prototype m_typeInstance;
public Client(Prototype typeInstance)
{
m_typeInstance = typeInstance;
}
public void Operation()
{
Prototype other = m_typeInstance.Clone();
other.DoSomething();
}
}
}