克隆模式

简介

深入理解克隆模式,出现的意义在于反复创建一样的对象,影响JAVA程序的效率。
克隆模式的优势在于底层调用了C,实现了内存之间的复制。

克隆模式区分:
1.浅克隆:在复制对象的时候里面的对象也是一起复制的过来,即调用的还是同一内存对象。
2.深克隆:里面内存对象是重新创建一份的

使用区别:
浅克隆在修改母对象的时候,子对象也会修改响应的赋值;深克隆则不会影响响应的赋值

Note:基本类型没有浅copy,都是深copy(新创建一个对象)

浅克隆

实现copy必须要实现Cloneable的接口,调用的native的方法。

//需要实现Clone,必须要实现Cloneable的接口(标记接口)
@Data
public class Car implements Cloneable{private String name;private Date createTime;@Overridepublic Object clone(){try {return super.clone();} catch (CloneNotSupportedException e) {e.printStackTrace();}return new Car();}
}

在使用过程中完全copy对象,引用地址也copy过来(基础类型不包括)

深克隆

实现深copy有好几种方法,序列化反序列化是一种方法。
第二种方法是clone的过程中实现创建新的对象(原理是引用一个新的对象,这样执行复制的时候就是新的对象了和老对象完全脱离关系)

public Object clone(){try {Date date=new Date();date.setTime(this.getCreateTime().getTime());DeepCopyCar deepCopyCar = (DeepCopyCar) super.clone();//修改内存对象为新的Date对象deepCopyCar.setCreateTime(date);return deepCopyCar;} catch (CloneNotSupportedException e) {e.printStackTrace();}return new Car();
}

《Head First 设计模式》读书笔记六--克隆模式相关推荐

  1. 设计模式读书笔记-----工厂方法模式

    一.问题 在前一章<设计模式读书笔记-----简单工厂模式>中通过披萨的实例介绍了简单工厂模式.在披萨实例中,如果我想根据地域的不同生产出不同口味的披萨,如纽约口味披萨,芝加哥口味披萨.如 ...

  2. Head First设计模式读书笔记六 第七章下 外观模式

    本文示例代码材料源自Head First设计模式 以前整理自己整理的链接: https://blog.csdn.net/u011109881/article/details/59153772 简介 H ...

  3. 大话设计模式读书笔记--6.原型模式

    简单的复制粘贴极有可能造成重复代码的灾难, 但是java中提供了克隆的功能, 如果一个对象创建过程复杂,又要频繁使用, 在初始化信息不发生变化的情况下,应当采取克隆而不是new一个对象 定义 原型模式 ...

  4. 大话设计模式读书笔记之原型模式

    由于大话这本书是以C#语言为基础写就的,本设计模式的例子中使用了一些c#中的API,因此就不再引用此书中的例子了,参考了一篇博客园中的大神写就的浅显易懂的JAVA版原型模式,在此奉上链接,以供大家学习 ...

  5. 设计模式读书笔记-----抽象工厂模式

    在工厂方法模式中,我们使用一个工厂创建一个产品,也就是说一个具体的工厂对应一个具体的产品.但是有时候我们需要一个工厂能够提供多个产品对象,而不是单一的对象,这个时候我们就需要使用抽象工厂模式. 在讲解 ...

  6. 大话设计模式读书笔记--4.代理模式

    生活中的例子: 班主任让班长通知班委下午3点开会 班长就是班主任的代理 代理模式的目的是: 隐藏真实访问对象,同时可以处理别的事情 定义 代理模式:为其他对象提供一种代理以控制对这个对象的访问 也就是 ...

  7. Head First设计模式读书笔记六 第七章上 适配器模式

    本文示例代码材料源自Head First设计模式 以前整理自己整理的链接: https://blog.csdn.net/u011109881/article/details/58261956 思想 要 ...

  8. 大话设计模式读书笔记10----外观模式(Facade)

    外观模式(Facade):为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更容易使用. 1.在设计初级阶段,应该要有意识的将不同的两个层分离. 2.层与层之间建 ...

  9. 大话设计模式读书笔记之桥接模式

    1.定义: 将抽象部分与它的实现部分分离,使它们都可以独立地变化. 需要理解,什么叫抽象与它的实现分离,并不是说,让抽象类与其派生类分离,因为这没任何意义.实现指的是抽象类和它的派生类用来实现自己的对 ...

最新文章

  1. 如何解决盗版Windows问题
  2. 第3章 IP寻址
  3. session、cookie、隐藏域、url参数传递四种会话及跟踪方式
  4. Win10 系统直接在目录下打开cmd
  5. 设置log缓存_node多级缓存之redis缓存
  6. 【ES11(2020)】Promise 扩展 allSettled()
  7. 程序员该面向运维,还是面向开发?
  8. 启动mongodb服务时报错100
  9. aud删除 oracle_Oracle 11g如何清理数据库的历史日志详解
  10. 机械设计基础课程设计详细步骤(说明书)
  11. 深度可分离卷积解析 - MobileNetV1
  12. tan和cot的梗_tan与cot有什么区别和联系
  13. matlab图像噪声处理,基于matlab图像处理的去噪处理.doc
  14. js 剩余时间,天,小时,分钟,秒
  15. mysql出现表warning_查看mysql的warnings
  16. 浅谈RESTful风格
  17. php gb28181,EasyGBS国标流媒体服务器GB28181国标方案安装使用文档
  18. 2020年中职组 网络空间安全 福建省赛题解析
  19. 【Linux】Linux下安装gcc/g++
  20. UnityHub使用方法教程和简介

热门文章

  1. C uint8_t,int64_t
  2. Android性能优化:那些关于Bitmap图片资源优化的小事
  3. Wireshark简介
  4. Android基于rxjava2+retrofit2实现断点续传下载,模拟支付宝更新app
  5. 商店英雄显示无法连接服务器,商店英雄: 冒险任务总是显示无法连接网络
  6. C/C++——有关Beep()函数的用法
  7. 保/防护器件系列之压敏电阻
  8. Matlab学习-CDF(累积分布函数图)绘制
  9. 【BZOJ 2716/2648】 [Violet 3]天使玩偶
  10. 众昂矿业:探究多色萤石的多姿多彩