zoukankan      html  css  js  c++  java
  • 设计模式二

    设计模式二

    一、原型模式

      主要用于创建重复的对象,同时又能保证性能。这种模式是实现一个原型接口,该接口用于创建当前对象的克隆。比如,当一个对象需要在一个高代价的数据操作之后被创建,我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用

      主要解决,在运行期建立和删除原型。

      关键代码,继承Cloneable,重写clone()

    二、原理解释

      首先要明白,原型模式是要复制指定对象,但是被复制的对象必须实现Clonable,重写Clon()方法。Clonable是一个标记接口,没有什么用,但是clone的时候不会抛异常。

      原型模式分为浅拷贝和深拷贝

      浅拷贝:当类的成员变量是基本数据类型时,浅拷贝会复制该属性的值赋值给新对象。2、当成员变量是引用数据类型时,浅拷贝复制的是引用数据类型的地址值。这种情况下,当拷贝出的,某一个类修改了引用数据类型的变量后,会导致所有拷贝出的类都发生改变。

      浅拷贝就是说,引用数据类型的变化,手原型的影响,原型改变,复制的也会改变。

      深拷贝:深拷贝不仅会复制成员变量为基本数据类型的值给新对象,还会给是引用数据类型的成员变量申请储存空间,并复制引用数据类型成员变量的对象。这样拷贝出的新对象就不怕修改了是引用数据类型的成员变量后,对其他拷贝出的对象造成影响了。

      深拷贝,一个是重写clone方法时,将引用数据类型,clone方法写上。

      

      深拷贝的方式二。

      就是将原型对象,实现Serializable接口,然后,写一个序列化与反序列化的类,现将类序列化输出,再将类反序列化读入,以此达到深拷贝的目的。用原型类,去调用这个序列化方法就可以。

  • 相关阅读:
    dpkg 被中断,您必须手工运行 sudo dpkg –configure -a 解决此问题
    运行wpscan报错Could not find 'nokogiri' (~> 1.8.0)
    理解:jar和war的区别
    AcWing3494. 国际象棋(状压DP)
    AcWing3422. 左孩子右兄弟(树形DP)
    python命名空间
    mysql日志大量报错“original commit timestamp is more recent than the immediate commit timestamp”
    python模块导入
    Centos-Docker镜像制作
    python面向对象之封装
  • 原文地址:https://www.cnblogs.com/gushiye/p/14007249.html
Copyright © 2011-2022 走看看