• 设计模式二


    设计模式二

    一、原型模式

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

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

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

    二、原理解释

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

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

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

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

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

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

      

      深拷贝的方式二。

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

  • 相关阅读:
    BZOJ 3669 & luogu 2387 魔法森林
    caioj 2064 & POJ 1741 & CH 0x40数据结构进阶(0x45 点分治)例题1:树
    caioj 2063& CH 0x40数据结构进阶(0x44 分块)例题4:小Z的袜子
    BZOJ 2154: Crash的数字表格
    追查坏牛奶(最大流)
    [JLOI2014]松鼠的新家
    [HAOI2015]树上操作
    [NOI2015]软件包管理器(树链刨分)
    [JSOI2008]球形空间产生器(高斯消元)
    [ZJOI2008]树的统计(树链刨分)
  • 原文地址:https://www.cnblogs.com/gushiye/p/14007249.html
Copyright © 2020-2023  润新知