android源码中不同设计模式的使用总结

设计模式之原型模式 - clone

2017-03-01  本文已影响36人  ahking17
创建一个对象除了new, 还可以通过调用已有对象的clone()的方式得到

Cloneable只是一个标识接口.
clone()方法的声明是在Object类中.
MyClass implements Cloneable只是表示这个类会提供clone()方法.
外界可以这样得到一个新对象, 而不一定非要new一个对象出来.

MyClass myClass1 = myClass.clone();
调用已有对象的clone()方法得到的新对象和new 一个对象出来的区别:

使用clone()不会调用构造方法, 实现本质是内存中的二进制数据的复制.

浅拷贝和深拷贝的区别

区别在, 对引用类型的成员变量的赋值上.

WordDocument implements Clonable {
    int index;
    ArrayList<String> mImages;

    //浅拷贝
    @Override
    protected WordDocument clone() {
        WordDocument doc = (WordDocument)super.clone();
        doc.index = this.index;
        doc.mImages = this.mImages;
        return doc;
    }

    //深拷贝
    @Override
    protected WordDocument clone() {
        WordDocument doc = (WordDocument)super.clone();
        doc.index = this.index;
        doc.mImages = (ArrayList<String>)this.mImages.clone();
        return doc;
    }

}
使用场景

模块A负责更新用户信息类 - User, 模块B要在一个界面上展示User中的数据. 如果直接把User的对象给模块B使用, 难免模块B调用一些public方法对User的对象进行了数据修改.
这个情况下, 就可以调用User对象.clone(), 把这个拷贝出来的对象给模块B使用, 即使模块B修改了对象中的数据, 也不会影响到原来的对象.
使用这种保护性拷贝的方式, 避免原来的对象被其他模块修改.

-------DONE.------------

上一篇下一篇

猜你喜欢

热点阅读