首页 > 代码库 > (Protype Pattern)原型模式

(Protype Pattern)原型模式

  • 适用性:

当我们系统中有一些类,在使用的时候都有同样需要大量的创建,而这样的创建是复杂的而且是浪费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.Name12         };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等。

(Protype Pattern)原型模式