原型模式就是通过已有的对象创建新对象
如果对象的创建成本比较大,而同一个类的不同对象之间差别不大(大部分字段都相同),
在这种情况下,我们可以利用对已有对象(原型)进行复制(或者叫拷贝)的方式来创建新对象,
以达到节省创建时间的目的。
这种基于原型来创建对象的方式就叫作原型设计模式(Prototype Design Pattern)。
如果对象中的数据需要经过复杂的计算才能得到(比如排序、计算哈希值),或者需要从非常慢速的 IO 中读取,我们就可以利用原型模式,从其他已有对象中直接拷贝得到,而不用重复执行这些耗时的操作。
原型模式的实现方式:深拷贝和浅拷贝
浅拷贝只复制索引
浅拷贝只会复制索引,不会复制数据本身。所以,得到的对象跟原始对象共享数据。
在 Java 语言中,
Object
类的clone()
方法执行的就是浅拷贝。
深拷贝即复制索引也复制数据本身
深拷贝得到的是一份完完全全独立的对象。深拷贝要比浅拷贝耗时、耗内存空间。
方法一:递归拷贝
递归拷贝对象、对象的引用对象以及引用对象的引用对象……直到要拷贝的对象只包含基本数据类型数据,没有引用对象为止。
方法二:先序列化再反序列化
先将对象序列化,然后再反序列化成新的对象。