1. 定义
使用场景
当直接创建对象的代价比较大时,则采用这种模式 。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。
优点
缺点
2. 克隆一个类
实现一个mail类,重写clone方法
写一个mailutil工具类
主函数:克隆10次mail类
结果
3. 深克隆和浅克隆
3.1 概念
克隆就是复制一个对象的复本.但一个对象中可能有基本数据类型,如:int,long,float等,也同时含有对象数据类型如(数组,集合等)。
浅拷贝(浅克隆)复制出来的对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。
深拷贝(深克隆)复制出来的所有变量都含有与原来的对象相同的值,那些引用其他对象的变量将指向复制出来的新对象,而不再是原有的那些被引用的对象。换言之,深复制把要复制的对象所引用的对象都复制了一遍。
3.2 浅克隆
初始化一个类pig
修改pig1的时间属性,pig2的时间属性也发生变化
3.3 深克隆
测试:
4. 克隆破坏单例
4.1 克隆破坏单例
HungrySingleton饿汉单例模式重写cloneable中的clone方法
克隆创建和HungrySongleton和原来的不同
4.2 解决克隆破坏单例
源码:https://github.com/LUK-qianliu/design_pattern_in_all