设计模式(五)(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.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等。

原文地址:https://www.cnblogs.com/yy3b2007com/p/4097767.html