什么是原型模式
如果对象的创建成本比较大,而同一个类的不同对象之间差别不大(大部分字段都相同),在这种情况下,我们可以利用对已有对象(原型)进行复制(或者叫拷贝)的方式来创建新对象,以达到节省创建时间的目的。这种基于原型来创建对象的方式就叫作原型设计模式(Prototype Design Pattern),简称原型模式。
为什么要使用原型模式
耗时操作有哪些:
- 如果用 new 创建就会触发类加载,对象实例化,初始化等操作,效率远低于拷贝,例如数据初始化需通过排序、计算哈希值这些步骤
- 数据需经过慢速的 IO 操作获取(RPC、网络、数据库和文件系统)
这种情况下往往可以复用旧的数据,采用原型模式更新数据,而原型模式就是基于 Clone
数据一致性
常见的数据一致性问题,如: Redis 与数据库,ES 与数据库,内存与数据库,分布式一致性等
在 Java 中如何设计原型模式
- 对象应该实现Cloneable接口
- 首先得有原型对象,才能实现拷贝
基于浅拷贝 or 基于深拷贝的原型模式
浅拷贝:只复制对象引用,or 基本数据类型;深拷贝:复制基本数据类型,同时复制对象的数据创建新的对象
如何实现深拷贝
- 递归拷贝对象
- 先将对象序列化,然后再反序列化成新的对象