• 原型模式


    原型模式(Prototype):用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

       原型模式其实是从一个对象再创建另外一个可定制的对象,而且不需知道任何创建的细节。

     1 abstract class Prototype
     2 {
     3      private string id;
     4      public string Id
     5      {
     6           get{return id;}
     7      }
     8 
     9      public Prototype(string id)
    10      {
    11              this.id = Id;
    12      }
    13 
    14      public abstract Prototype Clone();
    15 }
    16 
    17 
    18 //具体原型类
    19 class ConcreatePrototype: Prototype
    20 {
    21      public ConcreatePrototype(string id):base (id)
    22      {}
    23      public override Prototype Clone()
    24      {
    25           /*创建当前对象的浅表副本。方法是创建一个新对象,然后将当前对象的非静态字段复制到该对象。如果字段是值类型的,则对该对象执行逐位复制。如果字段是引用类型,则复制引用但不复制引用的对象;因此原始对象及其副本引用同一个对象*/
    26           return (Prototype)this.MemberwiseClone();
    27      }
    28 }
    View Code

    克隆隐藏了对象创建的细节,同时大大的提高了性能。不用重新初始化对象,而是动态地获得对象运行时状体。

         MemberwiseClone()方法是这样的,如果字段是值类型的,则对该字段执行逐位复制,如果字段是引用类型,则复制引用但不复制引用的对象;因此原始对象及其副本引用同一对象。

    浅表复制:被复制对象的所有变量都含有原来的对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象。

    深表复制:把引用对象的变量指向复制过来的新对象,而不是原来被引用的对象。

    深表复制的实现:

      1、提供Clone方法调用的私有构造函数,以便克隆数据

      2、在克隆对象的方法中调用私有构造函数,浅表复制其他变量

    实例:Dataset提供Clone和Copy方法,Clone是浅表复制,只复制数据结构;Copy既复制结构,也复制数据。

  • 相关阅读:
    Day13
    Day12
    Day11
    Day10
    Day9
    Day8
    Day7
    mac上使用gitlab拉项目报错Permissions 0644 for ...
    vue-cli3使用svg
    js合并多个array
  • 原文地址:https://www.cnblogs.com/qindy/p/10888741.html
Copyright © 2020-2023  润新知