原型模式
- GoF中的定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象
- 简单的例子:
//原型类
Abstract class Prototype
{
Private string name;
Public string Name
{
Get{return name;}
}
}
//具体原型类
Class ConcretePrototype : Prototype
{
Public override Prototype Clone()
{
Return (Prototype)this. MemberwiseClone();
}
}
//客户端代码
Main()
{
ConcreteProtype a = new ConcreteProtype();
ConcreteProtype b = (ConcreteProtype)b.Clone(); //这样就能够得到新的实例
}
- 实现关键:
先介绍一下这条设计模式在.net中,实现使用的关键方法MemberwiseClone()
该方法为.net的内建方法,MSDN中的解释:
方法创建一个浅表副本,具体来说就是创建一个新对象,然后将当前对象的非静态字段复制到该新对象。如果字段是值类型的,则对该字段执行逐位复制。如果字段是引用类型,则复制引用但不复制引用的对象;因此,原始对象及其复本引用同一对象。
*注意点:MemberwiseClone()方法是浅复制
*在.net中,system的命名空间中提供了ICloneable接口,实现其中唯一的方法Clone(),就可以完成原型模式了
- 优点:
从例子中不难看出,克隆实例的时候,跳过了类初始化的过程,隐藏了对象创建的细节,复制并创建了一个新的实例。若某些类中的构造函数消耗资源特别大,使用该模式能够使程序的运行性能大大提高。

浙公网安备 33010602011771号