浅复制与深复制
- 浅复制被复制对象的所有变量都含有与原来对象相同的值,而所有的对其他对象的引用仍然只指向原来的对象,换言之,浅复制默认只对值类型和String类型进行复制, 对于引用类型仍然指向原来的对象(内存地址相同,修改其中一个会影响到所有引用的对象)。
- 深复制在浅复制的基础上,对于引用类型的对象进行复制(内存地址不同,深复制后的所有对象对应内存都是不同值,互相修改不会印象)
原型模式优点
- 根据客户端要求实现动态穿件对象,客户端不需要知道对象的创建细节,便于代码的维护和扩展。
- 使用原型模式创建的对象如果比较复杂,会比直接new一个对象在性能上好很多,因为object的clone是本地方法,直接操纵二进制数据,在复制大对象的时候非常明显,比如需要在一个循环体内创建对象,I假如对象创建过程比较复杂,使用原型模式可以简化步骤。
原型模式的注意事项
-
使用原型模式复制对象不会调用类的构造方法,因为对象的复制是通过内存中来进行复制,不仅构造方法不会调用,访问权限也会失效。所以在某种程度上来讲,原型模式和单例模式是向冲突的。
-
在使用时一定要注意深拷贝与浅拷贝的问题,clone方法只会拷贝对象的基本的数据类型和String类型,对于数组、容器对象、引用对象等都不会拷贝。如果需要对数组 容器对象,引用对象进行拷贝,需要另行拷贝。
-
如果对象比较复杂,可以考虑实现Serializable接口,通过序列化和反序列化来进行深拷贝。
网友评论