Java设计模式(三)原型模式
创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型对象相同的新对象。
java中object方法clone,需要类实现cloneable接口
这就是原型模式,工作原理是将一个原型对象传给那个要发动创建的对象,这个对象通过请求原型对象拷贝他们自己来实施创建,及 对象.clone()
原型模式在spring中的使用
原型模式,创建的是属性相同的对象,对象不是同一个对象
深拷贝和浅拷贝
对象中有对象,调用clone方法时候,对象中的对象没有真正被克隆,只是指向原来的引用,这就是浅拷贝
浅拷贝,对于数据类型是基本数据类型的成员变量,直接进行值传递,就是将该属性值复制一份给新的对象。对于数据类型是引用数据类型的成员变量,浅拷贝会进行引用传递,只是将该成员变量的引用值(内存地址)复制一份给新的对象。这种情况,一个对象中修改成员变量会影响到另一个对象的值,clone()方法就是浅拷贝。
深拷贝,反之,肯定和浅拷贝不一样,对于数据类型是引用数据类型的成员变量,申请存储空间,并复制每个引用数据类型成员变量所引用的对象,就是要对整个对象进行拷贝,而不是复制原型的内存地址。对象序列化实现深拷贝
动态获得对象运行时的状态,如果原始发生变化,其他可领对象也会发生变化,无需修改代码
缺点,需要每个都有clone方法,对已有泪进行改造需要修改源代码,违背opc原则