原型模式

原型模式(Prototype),用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。[DP]

原型模式(Prototype)结构图

 

原型模式

原型模式其实就是从一个对象再创建另外一个可定制的对相关,而且不需知道任何创建的细节,下面来看看基本的原型模式代码:

原型类

abstract class Prototype
{
    private string id;
    
    public Prototype(string id)
    {
    
        this.id=id;

    }

    public string Id
    {

        get { return id; }

    }

    public abstract Prototype Clone();//抽象类关键就是有这样一个Clone方法
}

具体原型类

class ConcretePrototype1 : Prototype
{

    public ConcretePrototype1(string id) : base(id)
    {

    }

    public override Prototype Clone()
    {

        //创建当前对象的浅表副本。方法是创建一个新对象,然后将当前对象的非静态字段复制到该新对象。
        //如果字段是值类型的,则对该字段执行逐位复制。如果字段是引用类型,则复制引用但不复制引用的对象。
        //因此,原始对象及其副本引用同一对象。
        return (Prototype)this.MemberwiseClone();

    }
}

 客户端代码

static void Main(string[] args)
{

    ConcretePrototype1 p1 = new ConcretePrototype1("I");

    //克隆类ConcretePrototype1的对象p1就能得到新的实例c1
    ConcretePrototype1 c1 = (ConcretePrototype1)p1,Clone();
    
    Console.WriteLine("Cloned: {0}", c1.Id);

    Console.Read()

}

这样就可以不用实例化ConcretePrototype1了,直接克隆就行了。