设计模式(七)——原型模式

本文探讨了原型模式的优势及其实现方式,包括浅拷贝和深拷贝的区别,并提供了具体的Java实例代码。同时,文章还列举了一些使用原型模式时需要注意的问题。

一、优点

1.原型模式是在内存二进制流的拷贝,比直接new一个对象性能好很多。

2.直接在内存中拷贝,逃避了构造函数的约束;应用时要注意这点——构造函数是不执行的

二、实例代码

public class PrototypeClass implements Cloneable{

    public Object clone() throws CloneNotSupportedException {
        PrototypeClass prototype  = (PrototypeClass) super.clone();
        return prototype;
    }
}

三、浅拷贝和深拷贝

Object类提供的clone方法拷贝原始类型(如int,long等),但不拷贝对象内的数组、引用对象,还是指向原生对象的内部元素地址,导致多个对象共享一个变量,这种方式为浅拷贝;如果要实现深拷贝,必须将原型模式中的数组、容器对象、引用对象等另行拷贝。

//深度拷贝

public class PrototypeDeep implements Cloneable{
    private ArrayList<String> list = new ArrayList<String>();
    
    @Override
    protected Object clone() throws CloneNotSupportedException {
        PrototypeDeep prototy = (PrototypeDeep) super.clone();
        list = (ArrayList<String>) this.list.clone();
        return prototy;
    }
}

四、注意事项

1.通过clone拷贝生成对象时,对象的构造函数不被执行

2.因为clone拷贝生成对象无视构造函数,因此破坏单例实现

3.只有实现了Cloneable接口的类才可以拷贝

4.重写Object对象的clone方法时,其作用域为project,为了方便外部类调用,手动改为publich

转载于:https://my.oschina.net/kun123/blog/725942

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值