23种设计模式之原型

目录

 

1.简介

2.优点

3.缺点

4.形式


1.简介

用原型实例指定创建对象的种类,并且通过拷贝这些这些原型创建新的对象。其核心在于clone方法,通过该方法可以进行对象的拷贝。且于final关键字冲突。

2.优点

由于clone方法是在内存二进制流的拷贝,相比直接new出来性能更高,尤其是需要在循环体内产生大量对象时非常适用。

3.缺点

由于是在内存中拷贝,所以构造函数是不会被执行的。

4.形式

一般形式,只涉及到对象或者原始类型,如int,char等

public class Prototype implements Cloneable {
    @Override
    public Prototype clone() {
        Prototype prototype = null;
        try{
            prototype = (Prototype) super.clone();
        }catch(CloneNotSupportedException e) {
             e.printStackTrace();
             System.out.println("异常处理");
        }
    }
}

浅拷贝,由于Object类提供的clone方法只是拷贝本对象,而对其对象内部的数组,引用对象不会被拷贝,还是指向原生对象内部的元素地址。这样造成的结果就是可能拷贝过来的对象将会共享私有变量。

public class Prototype implements Cloneable {
    private ArrayList<String> arrayList = new ArrayList<String>();

    @Override
    public Prototype clone() {
        Prototype prototype = null;
        try {
            prototype = (Prototype)super.clone();
        }catch(CloneNotSupportedException e) {
            e.printStackTrace();
            System.out.println("异常处理");
        }
        return prototype;
    }
}

深拷贝相比浅拷贝的区别就在于,它同时会拷贝对象内部的数组和引用对象,这样两个对象之间将相互不会产生影响。

public  class Prototype implements Cloneable {
    private ArrayList<String> arrayList = new ArrayList<String>();

    @Override
    public Prototype clone() {
        Prototype prototype = null;
        try {
            prototype = (Prototype)super.clone();
            prototype.arrayList = (ArrayList<String>)this.arrayList.clone();
        }catch(CloneNotSupportedException e) {
            e.printStackTrace();
            System.out.println("异常处理");
        }
        return prototype;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值