原型模式
原型模式(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了,直接克隆就行了。