什么是原型模式
原型模式也称为克隆模式,可以在不知道对象创建过程的情况下复制出一个新的对象。
克隆方式分为浅克隆和深克隆。
怎么实现原型模式
Object类中有一个clone()方法,所以要使用原型模式非常简单,只要实现Cloneable的接口就可以了。
Java语言提供的Cloneable接口只起一个作用,就是在运行时期通知Java虚拟机可以安全地在这个类上使用clone()方法。通过调用这个clone()方法可以得到一个对象的复制。由于Object类本身并不实现Cloneable接口,因此如果所考虑的类没有实现Cloneable接口时,调用clone()方法会抛出CloneNotSupportedException异常。
浅克隆
克只负责克隆按值传递的数据(比如基本数据类型、String类型),而不复制它所引用的对象,换言之,所有的对其他对象的引用都仍然指向原来的对象。
深克隆
复制对象的所有属性,复制出来的新对象和原对象指向两个不同的实例,既经过深克隆的对象,会在内存中生成一个新的实例。深克隆的实现方式:通过序列化写入流中,再反序列化生成一个新的对象。
优缺点
优点:
1.可以不需要知道对象的创建过程,直接快速创建出新对象。这点对于初始化过程复杂的对象,十分有效。
缺点:对象的复制有时相当的复杂。特别是当一个类引用不支持序列化的间接对象,或者引用含有循环结构的时候。
代码参考:https://github.com/biggirlo/study/tree/dev/src/main/java/com/biggirlo/design/prototype