定义:用原型示例指定创建对象的种类,并通过拷贝这些原型创建新的对象。
原型模式其实就是从一个对象再创建一个可定制的对象,而不需要知道任何创建的细节。
结构图:
Prototype.cs:
abstract class Prototype { private string id; public Prototype(string id) { this.id = id; } public string Id { get { return id; } } public abstract Prototype Clone(); }
ConcretePrototype.cs:
class ConcretePrototype : Prototype { public ConcretePrototype(string id) : base(id) { } public override Prototype Clone() { return (Prototype)this.MemberwiseClone(); } }
对于.Net而言,那个原型抽象类Prototype是不用到的,因为克隆太常用,所以在.Net在System命名空间中提供了ICloneable接口,其中包含方法Clone()。
因此该示例可做如下修改:
1.删除Prototype.cs
2.ConcretePrototype.cs修改为如下图
优点:隐藏对象创建的细节,又大大的提高了性能。
如果不使用该模式,而是每次都是用New实例化对象,那么每次都要执行一次构造函数,如果构造函数执行时间很长,那么多次的执行这个初始化操作将非常低效。
补充:
浅复制: 被复制对象的所有变量都含有与原来的对象相同的值,而其所有的对其他对象的引用都仍然指向原来的对象。
深复制:被复制对象会将所有非引用类型的字段复制给新对象,同时将引用类型所指向地址中存的对象复制给新的对象。
区别:
浅复制和深复制的区别仅在于对引用类型的对待上,一个是复制的地址,一个是复制的地址指向位置的数据.