原型模式,就是我们在有一个原型对象后,要继续创建对象时,可以不通过new来创建新对象,而是通过克隆这个原型对象来得到一个新的对象。
克隆有两个类型,
深克隆和浅克隆:
浅克隆就是使用默认的clone()方法,只复制它本身和值类型的成员变量,而引用类型的成员变量不会复制,当原型对象修改引用类型的值时,克隆对象也会被修改,但是他们两者的哈希值是不一样的。
深克隆有两种方法,重写clone方法和通过对象序列化,可以将除了原型对象本身和所有成员变量都复制。
原型模式的优点有:
当创建的对象实例比较复杂的时候,使用原型模式可以简化对象的创建过程,通过复制一个已有的实例提高创建效率。
如果原型对象增加或删除属性时,克隆对象也会一起改变,不用修改代码。
原型模式提供了简化的创建结构,比如工厂模式需要有一个工厂类来创建,而原型模式只需要通过封装在类中的克隆方法实现
原型模式还可以用来保存对象的状态,就相当于存档,以便在需要的时候使用,可以恢复到保存时的这一状态。
缺点:
需要为每一个类配置一个克隆方法,而且这个方法在类的内部,当对已有类进行改造时,需要修改代码,违反了开闭原则
在实现深克隆的时候需要编写比较复杂的代码,实现起来比较麻烦