原型模式以及深克隆和浅克隆
原型模式的好處
創建比較復雜的對象,無需考慮過程,簡化了創建對象的創建過程,同時也能提 高效率
原型模式分為淺克隆和深克隆,不同點
以我目前的理解:深克隆和淺克隆對于我們對象內的引用對象的克隆不一樣
淺克隆:對于我們數據類型是基本數據類型的成員變量,淺拷貝是直接進行值傳遞,但是對于克隆我們對象內的引用類型,是不對其再開辟一個內存空間的.它只是創建了一個新的引用對象,指向這塊內存空間,我們修改其中一個引用對象所指向的內存空間,那么另一個對象的引用指向的內存空間也會隨之改變
深克隆:對于對象完全復制一份,不管是基本數據類型,還是我們的引用類型,我們都進行拷貝一份,而淺克隆不對引用類型進行復制,只是創建一個新的引用類型
淺克隆和深克隆的實現方法:對于淺克隆我們用默認的clone方法實現,對于深克隆我們可以用clone方法實現,但是我們更加推薦使用序列化實現
從代碼層面來看我們可以先創建一個我們需要克隆的實體類,里面有個引用類型的friend,這個類實現了clonable接口,我們重寫了一下Object下的clone方法,實際上還是用的默認clone方法
這是我們需要測試的代碼,可以更加直觀的展示淺克隆引用對象并不開辟新的空間,僅僅只是創建一個新的引用類型而已
從打印結果我們很明顯的看出來,我們里面的引用類型friend在原對象和克隆對象里面指向的都是同一塊內存區域,并且我們對其中一個對象進行修改,另一個對象也隨之修改
對于深克隆,我們有兩種實現的方法,第一種就是普通的clone方法,第二種就是序列化實現(推薦使用)
實際上就是把里面的引用對象也進行克隆從而達到分配新的內存空間給新的對象.
第二種就是我們推薦使用的,序列化方式實現,這里千萬要記住,我們對于序列化的話,一定要實現序列化接口Serializable
這里不進行演示了,這是第二種也是推薦使用的深克隆,通過序列化和反序列化進行我們的深克隆
原型模式的好處,就是可以利用原型模式簡化對象的創建過程,提高我們的 效率,不用重新初始化的對象,而是動態的獲得對象的運行時狀態,如果原始的對象發生變化,其他克隆的對象也發生相應的變化無需修改代碼
缺點:在實現深克隆的時候可能需要比較復雜的代碼而且我們需要為每一個類配備一個克隆的方法,對新類不是很難,但是對于已經存在的類進行改造的話.就違背了開閉原則
總結
以上是生活随笔為你收集整理的原型模式以及深克隆和浅克隆的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 转:国内网址导航的现状和未来
- 下一篇: 百威英博分享酒店业中小企业如何渡过全球危