原型模式

原型模式就是通过已有的对象创建新对象

如果对象的创建成本比较大,而同一个类的不同对象之间差别不大(大部分字段都相同),
在这种情况下,我们可以利用对已有对象(原型)进行复制(或者叫拷贝)的方式来创建新对象,
以达到节省创建时间的目的。
这种基于原型来创建对象的方式就叫作原型设计模式(Prototype Design Pattern)

如果对象中的数据需要经过复杂的计算才能得到(比如排序、计算哈希值),或者需要从非常慢速的 IO 中读取,我们就可以利用原型模式,从其他已有对象中直接拷贝得到,而不用重复执行这些耗时的操作。

原型模式的实现方式:深拷贝和浅拷贝

浅拷贝只复制索引

浅拷贝只会复制索引,不会复制数据本身。所以,得到的对象跟原始对象共享数据。

在 Java 语言中,Object 类的 clone() 方法执行的就是浅拷贝。

深拷贝即复制索引也复制数据本身

深拷贝得到的是一份完完全全独立的对象。深拷贝要比浅拷贝耗时、耗内存空间。

方法一:递归拷贝

递归拷贝对象、对象的引用对象以及引用对象的引用对象……直到要拷贝的对象只包含基本数据类型数据,没有引用对象为止。

方法二:先序列化再反序列化

先将对象序列化,然后再反序列化成新的对象。