设计模式二
一、原型模式
主要用于创建重复的对象,同时又能保证性能。这种模式是实现一个原型接口,该接口用于创建当前对象的克隆。比如,当一个对象需要在一个高代价的数据操作之后被创建,我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用
主要解决,在运行期建立和删除原型。
关键代码,继承Cloneable,重写clone()
二、原理解释
首先要明白,原型模式是要复制指定对象,但是被复制的对象必须实现Clonable,重写Clon()方法。Clonable是一个标记接口,没有什么用,但是clone的时候不会抛异常。
原型模式分为浅拷贝和深拷贝
浅拷贝:当类的成员变量是基本数据类型时,浅拷贝会复制该属性的值赋值给新对象。2、当成员变量是引用数据类型时,浅拷贝复制的是引用数据类型的地址值。这种情况下,当拷贝出的,某一个类修改了引用数据类型的变量后,会导致所有拷贝出的类都发生改变。
浅拷贝就是说,引用数据类型的变化,手原型的影响,原型改变,复制的也会改变。
深拷贝:深拷贝不仅会复制成员变量为基本数据类型的值给新对象,还会给是引用数据类型的成员变量申请储存空间,并复制引用数据类型成员变量的对象。这样拷贝出的新对象就不怕修改了是引用数据类型的成员变量后,对其他拷贝出的对象造成影响了。
深拷贝,一个是重写clone方法时,将引用数据类型,clone方法写上。
深拷贝的方式二。
就是将原型对象,实现Serializable接口,然后,写一个序列化与反序列化的类,现将类序列化输出,再将类反序列化读入,以此达到深拷贝的目的。用原型类,去调用这个序列化方法就可以。