6.原型模式

6.原型模式,第1张

6.原型模式
  1. 原型模式 Prototype

    模式定义:指原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象,原型模式主要用于对象的复制,它的核心是就是类图中的原型类Prototype

    典型应用:当代码不应依赖于需要复制的对象的具体类时,请使用原型模式

    AbstractBeanDefinition
    java.util.Arrays
    

    优点:

    1. 可以不耦合具体类的情况下克隆对象
    2. 避免重复的初始化代码(直接内存复制,不走类的构建函数,因此单例模式和原型模式是冲突的,使用时要注意)
    3. 更方便的构建复杂对象,比直接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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5162370.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-18
下一篇 2022-11-18

发表评论

登录后才能评论

评论列表(0条)

保存