zoukankan      html  css  js  c++  java
  • 原型模式

    解释:

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

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

      

    优点:

      防止多次实例化同样的东西,并设置同样的属性。类似克隆。

      对性能提高较大。一般在初始化信息不发生变化的情况下,克隆是最好的办法。这既隐藏了对象创建的细节,又对性能是大大的提高。

      等于不用重新初始化对象,而是动态地获得对象运行时的状态。

    注意:

      MemberwiseClone()是浅表复制,对于值类型没什么问题。但是对于引用类型,还是指向了原来的对象。所以修改后会影响克隆之前引用对象的值。  

    代码示例:

      

    升级版本:

      对于.NET而言,原型抽象类prototype用不着,因为克隆太常用了。所以,.NET在System命名空间中提供了ICloneable接口,其中有方法Clone()。这样,目标类只需要实现这个接口就可以完成原型模式了。

    代码示例:

      

       

    浅复制:

      被复制对象的所有变量都含有与原来对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象。(引用对象克隆的与原始的都指向同一个引用)

      

      简历类的Clone():

      

      客户端代码:

       

      结果:

      

    深复制:

      把引用对象的变量指向复制过的新对象,而不是原有的被引用的对象。(引用对象克隆的与原始的指向不同的引用)

      数据集对象DataSet,Clone()方法用来复制DataSet的结构,但不复制DataSet的数据,实现了原型模式的浅复制。Copy()方法不但复制结构,也复制数据,实现了原型模式的深复制。

      

         简历类的Clone():

      

         简历类的初始化:

      

      工作经历的Clone():

      

      结果:

      

      深复制要深入到多少层,需要事先考虑好,而且要当心出现循环引用的问题,需要小心处理。此例只深入到第一层。

  • 相关阅读:
    牛客网 二叉树的镜像 JAVA
    牛客网 反转链表 JAVA
    牛客网 调整数组顺序使奇数位于偶数前面 JAVA
    Integer to Roman LeetCode Java
    Valid Number leetcode java
    Longest Common Prefix
    Wildcard Matching leetcode java
    Regular Expression Matching
    Longest Palindromic Substring
    Add Binary LeetCode Java
  • 原文地址:https://www.cnblogs.com/panpanwelcome/p/5569529.html
Copyright © 2011-2022 走看看