设计模式---原型模式

原型模式,即指定类实现Cloneable接口,覆写clone方法。在创建对象时,先new产生一个对象,其余对象均由clone()方法产生。

优点:

1、由于clone()方法直接是从内存中复制原对象的二进制流,所以性能上比直接new一个对象好很多,适合在循环体内产生大批量对象。

2、clone()方法生成对象时不会执行构造函数,摆脱了构造函数的约束。这既是优点也是缺点。

使用场景:

1、资源优化场景。类初始化需要消耗非常多的资源。

2、性能和安全场景。通过new一个对象需要非常复杂和繁琐的数据准备或访问权限,则可以使用原型模式

3、一个对象被多人修改。当一个对象需要被多人修改时,则可以考虑使用原型模式拷贝这个对象供修改者使用。

浅拷贝和深拷贝:

浅拷贝就是覆写的clone方法中只调用object的clone()方法拷贝生成新对象,由于拷贝时只会拷贝基本类型的成员变量,引用类型或者数组的成员变量只会拷贝引用地址,这就导致了在修改拷贝对象的非基本类型的成员变量时,原对象的对应成员变量也会更改。

深拷贝就是clone()方法中除了调用clone()方法生成新对象,引用类型或者数组的成员变量也调用clone方法。

public class Thing implements Cloneable{

    private ArrayList list = new ArrayList();

    public ArrayList getList(){

        return this.list;

    }

    public void setList(String value) {

        this.list.add(value);

    }

    @Override

    public Thing clone() {

        Thing thing = null;

        try {

            thing = (Thing)super.clone();

         //深拷贝

            thing.list = (ArrayList<String>)this.list.clone();

        }catch(CloneNotSupportedException e) {

            e.printStackTrace();

        }

        return thing;

    }

}


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。