美文网首页
设计模式---原型模式

设计模式---原型模式

作者: 悠然望剑 | 来源:发表于2018-07-09 09:45 被阅读0次

原型模式,即指定类实现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;

    }

}


相关文章

网友评论

      本文标题:设计模式---原型模式

      本文链接:https://www.haomeiwen.com/subject/khkzuftx.html