設(shè)計模式之原型模式 - clone

創(chuàng)建一個對象除了new, 還可以通過調(diào)用已有對象的clone()的方式得到

Cloneable只是一個標(biāo)識接口.
clone()方法的聲明是在Object類中.
MyClass implements Cloneable只是表示這個類會提供clone()方法.
外界可以這樣得到一個新對象, 而不一定非要new一個對象出來.

MyClass myClass1 = myClass.clone();
調(diào)用已有對象的clone()方法得到的新對象和new 一個對象出來的區(qū)別:

使用clone()不會調(diào)用構(gòu)造方法, 實現(xiàn)本質(zhì)是內(nèi)存中的二進(jìn)制數(shù)據(jù)的復(fù)制.

淺拷貝和深拷貝的區(qū)別

區(qū)別在, 對引用類型的成員變量的賦值上.

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負(fù)責(zé)更新用戶信息類 - User, 模塊B要在一個界面上展示User中的數(shù)據(jù). 如果直接把User的對象給模塊B使用, 難免模塊B調(diào)用一些public方法對User的對象進(jìn)行了數(shù)據(jù)修改.
這個情況下, 就可以調(diào)用User對象.clone(), 把這個拷貝出來的對象給模塊B使用, 即使模塊B修改了對象中的數(shù)據(jù), 也不會影響到原來的對象.
使用這種保護(hù)性拷貝的方式, 避免原來的對象被其他模塊修改.

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,641評論 18 399
  • 1大同小異的工作周報 Sunny軟件公司一直使用自行開發(fā)的一套OA (Office Automatic,辦公自動化...
    justCode_閱讀 1,240評論 0 3
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,537評論 19 139
  • 五彩的光,即便世界黑暗,也要做發(fā)光的太陽。 香草味,好看的顏色,嘴里的甜奶油 一個人也要傲然挺立,等待也好,堅持也...
    Summer昕小張閱讀 204評論 0 3
  • 隱忍 1.隱忍對身體有損害。把情緒吞到肚子里,情緒有能量波,就會對人的身體臟器產(chǎn)生破壞性的影響。 2.隱忍使親密關(guān)...
    可可兒媽閱讀 232評論 0 0

友情鏈接更多精彩內(nèi)容