-
原型模式 Prototype
模式定义:指原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象,原型模式主要用于对象的复制,它的核心是就是类图中的原型类Prototype
典型应用:当代码不应依赖于需要复制的对象的具体类时,请使用原型模式
AbstractBeanDefinition java.util.Arrays
优点:
- 可以不耦合具体类的情况下克隆对象
- 避免重复的初始化代码(直接内存复制,不走类的构建函数,因此单例模式和原型模式是冲突的,使用时要注意)
- 更方便的构建复杂对象,比直接new一个对象在性能上要好得多,原型模式的clone时本地方法,性能好
8中基本数据类型都是不可变类型 immutable,所以clone只能拷贝这8中数据类型
浅拷贝和深拷贝的应用对比?通过序列化实现深拷贝为什么不推荐?
-
深拷贝与浅拷贝。Object类的clone方法只会拷贝对象中的基本的数据类型,对于数组、容器对象、引用对象等都不会拷贝,这就是浅拷贝。如果要实现深拷贝,必须将原型模式中的数组、容器对象、引用对象等另行拷贝。
例如: -
public class Prototype implements Cloneable { private ArrayList list = new ArrayList(); public Prototype clone(){ Prototype prototype = null; try{ prototype = (Prototype)super.clone(); prototype.list = (ArrayList) this.list.clone(); }catch(CloneNotSupportedException e){ e.printStackTrace(); } return prototype; } }
由于ArrayList不是基本类型,所以成员变量list,不会被拷贝,需要我们自己实现深拷贝,幸运的是java提供的大部分的容器类都实现了Cloneable接口。所以实现深拷贝并不是特别困难。
PS:深拷贝与浅拷贝问题中,会发生深拷贝的有java中的8中基本类型以及他们的封装类型,另外还有String类型。其余的都是浅拷贝。
参考:https://www.cnblogs.com/fengyumeng/p/10646487.html
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)