今天我们来聊一聊设计模式的创建型设计模式的第三种原型模式
这个设计模式用途也很广泛,原型模式其实就是像一个克隆蓝图,它就是按指定对象实例通过拷贝这些原型创建新的对象。这就跟克隆是差不多的原理!
原型模式的实施又分为浅克隆和深克隆,浅克隆就是进行简单的值克隆,所谓值克隆就是值克隆基本的八大数据类型,引用类型不克隆仍然使用原对象的引用类型对象的地址;深克隆就是无论是简单的值还是引用数据类型全部都进行克隆一份!
光说不练毫无益处,下面我来一一实现
浅克隆
先创建一个bean对象,实现Cloneable接口中的clone方法
虽然说按照这个浅克隆的写法可以得到克隆后的对象,但是这仅仅是值克隆,可以看到上面的案例中,像名字、别名等都可以克隆一份,但是Person这个对象中的引用类型是指向同一个对象的,这就不是克隆了!所有浅克隆只是对简单的值克隆!
深克隆
对比浅克隆,深克隆更加的好用和实用!
Person对象还是浅克隆案例的Person对象,只是在类的头上多实现了一个Serialiazble接口,用于序列化操作,再加上private static final long serialVersionUID = 1L; 一个序列号也行
这里就分为两种写法,一种就是原生的浅克隆的加强版,另一种就是通过序列化和反序列化实现克隆的完整性
先看第一种浅克隆的加强版
可以看到两个对象的名字和各方面属性是相同,但是引用类型是不同的,但是所赋的值是相同的。
另一种是序列化方法,比较实用,特点是较为简单,易操作
很简单的操作,先将对象序列化读出去,在反序列化写进来
结果那也就理所当然的是相同的两份了!
总结:以上可以看到克隆的好处就是再不用新创建一个对象就可以实现两个对象之间的克隆更加易于操作,当对象很复杂的时候无异于节省更多的时间从而更加提高了工作效率。缺点也很明显,违背了ocp(开闭原则),因为每个被克隆的类都要被改动,有好处也有不足这也很正常!