设计模式之原型模式 - clone

创建一个对象除了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.------------

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,874评论 18 399
  • 1大同小异的工作周报 Sunny软件公司一直使用自行开发的一套OA (Office Automatic,办公自动化...
    justCode_阅读 1,201评论 0 3
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,281评论 19 139
  • 五彩的光,即便世界黑暗,也要做发光的太阳。 香草味,好看的颜色,嘴里的甜奶油 一个人也要傲然挺立,等待也好,坚持也...
    Summer昕小张阅读 189评论 0 3
  • 隐忍 1.隐忍对身体有损害。把情绪吞到肚子里,情绪有能量波,就会对人的身体脏器产生破坏性的影响。 2.隐忍使亲密关...
    可可儿妈阅读 205评论 0 0