原型模式(深拷贝以及浅拷贝)

原型模式:
用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。
原型模式就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节。

通俗的来说,就是对象自身提供clone方法,用于克隆一份对象给其他方使用。
好处就是,如果构造函数和初始化过程 非常的复杂的时候,创建对象代价非常大的时候,使用这种模式 可以很方便。

一般在初始化信息不发生变化的情况下,克隆是最好的办法
隐藏了对象创建的细节,又对性能提高,不用重新初始化对象
而是动态的获取对象的运行时的状态。

比如说实现快照读或者快照写,需要拷贝一份原有对象的快照。

在这里插入图片描述

但是要注意的是深拷贝和浅拷贝的区别
浅拷贝:
如果字段是值类型,则对该字段逐位复制,如果字段是引用类型,则复制引用但不复制引用对象,因此原始对象及其副本引用同一对象 。
被复制的对象的所有变量都含有与原来的对象相同的值,而所有对其他对象的引用都仍指向原来的对象。

深拷贝:
深拷贝,把引用对象的变量指向复制过的新对象,而不是原来的被引用的对象。
但是千万注意,如果复制的对象 里面又有引用其他对象,然后引用的其他对象再有其他对象的引用,有很多层。 这样的话,要事先就考虑好,复制需要深入多少层,而且要当心循环引用的问题。

拷贝接口

public interface Prototype {

    Prototype Clone();
}

实现接口的类

public class PrototypeA implements Prototype {

    private String name = "对象A";

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public Prototype Clone() {
        PrototypeA prototype = new PrototypeA();
        prototype.setName(this.name);
        return prototype;
    }
}

使用验证

  public static void main(String[] args) {
        Prototype prototype1 = new PrototypeA();
        System.out.println("prototype1的hashCode" + prototype1);

        Prototype prototype2 =prototype1.Clone();
        System.out.println("prototype2的hashCode" + prototype2);

    }

在这里插入图片描述

并且对副本的修改 ,不会影响到原来的对象

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值