原型模式 (学习笔记4)
原文地址:http://c.biancheng.net/view/1343.html
使用场景:
- 通过new 创建新的副本非常麻烦,需要传入很多值,且这些值大部分是不变的。
- 需要不停的高效的创建新的副本来满足业务需求
克隆:
- 浅克隆:生成一个新的副本,但是非基本类型的数据还是指向原内存地址。
- 深克隆:生成一个新的副本,包括非基本类型的数据也是新的。
object.clone()属于浅克隆,只有实现
Cloneable接口才是深克隆。
实现深度克隆还有:
通过构造函数实现
- Apache Commons Lang序列化
SerializationUtils.clone(obj)
- Gson, Jackson, fastjson等。
优点:
- JAVA自带的克隆模式是基于内存二进制流,在性能方面比new要高出许多。
- 可以使用深度克隆的方式保留一份历史副本,以便在需要的时候可以做到操作回退。
//具体原型类 class Realizetype implements Cloneable { Realizetype() { System.out.println("具体原型创建成功!"); } public Object clone() throws CloneNotSupportedException { System.out.println("具体原型复制成功!"); return (Realizetype) super.clone(); } } //原型模式的测试类 public class PrototypeTest { public static void main(String[] args) throws CloneNotSupportedException { Realizetype obj1 = new Realizetype(); Realizetype obj2 = (Realizetype) obj1.clone(); System.out.println("obj1==obj2?" + (obj1 == obj2)); } }
本文来自博客园,作者:huiy_小溪,转载请注明原文链接:https://www.cnblogs.com/huiy/p/15554928.html