設計模式之原型模式 - 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,766評論 18 399
  • 1大同小異的工作周報 Sunny軟件公司一直使用自行開發的一套OA (Office Automatic,辦公自動化...
    justCode_閱讀 1,190評論 0 3
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,947評論 18 139
  • 五彩的光,即便世界黑暗,也要做發光的太陽。 香草味,好看的顏色,嘴里的甜奶油 一個人也要傲然挺立,等待也好,堅持也...
    Summer昕小張閱讀 186評論 0 3
  • 隱忍 1.隱忍對身體有損害。把情緒吞到肚子里,情緒有能量波,就會對人的身體臟器產生破壞性的影響。 2.隱忍使親密關...
    可可兒媽閱讀 189評論 0 0