zoukankan      html  css  js  c++  java
  • 设计模式(五)(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等。

  • 相关阅读:
    C#开发BIMFACE系列44 服务端API之计算图纸对比差异项来源自哪个图框
    C#开发BIMFACE系列43 服务端API之图纸拆分
    C#开发BIMFACE系列42 服务端API之图纸对比
    利用 OpenVINO 进行推理加速(一)
    虚拟化技术概述(一)
    利用目标跟踪来提高实时人脸识别处理速度
    目标追踪(Object Tracking)概念的简要介绍
    Python3 使用IMAP接收邮件
    Git使用
    Git基础
  • 原文地址:https://www.cnblogs.com/yy3b2007com/p/4097767.html
Copyright © 2011-2022 走看看