- 定义:
原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型来创建新的对象
- 适用性:
当我们系统中有一些类,在使用的时候都有同样需要大量的创建,而这样的创建是复杂的而且是浪费CPU,内存资源的,为了解决这一问题,就出现了原型模式(深度克隆,浅克隆)
- 模式思想:
1. 通过使用同一的创建对象方案,尽量避免创建对象复杂过程代码重复出现;
2. 为了节省CPU,内存资源,我们可以让不同的类之间共享一些(业务上允许)资源,从而达到缩小占用内存空间;
3. 这样的一类业务需求本来就具有一定的同一性,我们抽象出一个同一的抽象类(Protype,ICloneable)作为规范,让有这样需求的类实现他们,从而达到了结构同一。
- 模式图:
- 模式示例:
原型抽象类:
1 public interface ICloneable<T> 2 { 3 T Clone(); 4 }
具有原型属性类:
1 public class Member:ICloneable<Member> 2 { 3 public int ID{get;set;} 4 5 public string Name{get;set;} 6 7 public Member Clone() 8 { 9 Member member=new Member(){ 10 ID=this.ID, 11 Name=this.Name 12 }; 13 return member; 14 } 15 }
1 public class Product:ICloneable< Product > 2 { 3 public int ID{get;set;} 4 5 public string Name{get;set;} 6 7 public Member Owner{get;set;} 8 9 public Product Clone() 10 { 11 Product product=new Product (){ 12 ID=this.ID, 13 Name=this.Name, 14 Owner=this.Owner // 当前创建者,应该均为一个创建者,所以这里就可以共享Owner,从而节省了内存空间。 15 }; 16 return product; 17 } 18 }
- 特点:
Protype抽象类特点: | 就有一个抽象接口Clone,返回值T(object,尽量使用泛型,避免加压包) |
具有原型属性的一些类特点: |
都实现了Protype抽象类,都有自己制定规则的Clone方法,内部都采用了符合业务需求的克隆方案(深度克隆还是采用浅克隆,要依据业务来定)。 |
当然.NET系统中叶提供了类似的接口类ICloneable,并提供了MemberwiseClone()浅克隆方法。
深克隆方案也有:反序列化、反射、new等。