什么是備忘錄模式

成都創新互聯是一家專業提供濱江企業網站建設,專注與做網站、網站建設、H5建站、小程序制作等業務。10年已為濱江眾多企業、政府機構等服務。創新互聯專業的建站公司優惠進行中。
所謂備忘錄模式,就是在不破壞封閉的前提下,捕獲一個對象的內部狀態,并在該對象之外保存這個狀態,以后可將這個對象恢復到原先保存的狀態的設計模式。
備忘錄模式的實現方式
備忘錄模式的實現方式需要保證被保存的對象狀態不能被對象從外部訪問,目的是為了保護好被保存的這些對象狀態的完整性以及內部實現不向外暴露。
民族英雄文天祥《正氣歌》記載了一個“在齊太史簡”的故事,我們先定義一個歷史類:
public classHistory {
privateString[]recorders= {"太史伯","太史仲","太史叔","太史季","南史氏"}; private intrecord_num=0;//被崔杼殺害的史官數量 privateStringtruth="崔杼弒其君";
publicHistory(intrecord_num) { this.record_num= record_num; }
/** * 發生 */ public voidhappen(){ Log.e("歷史事件發生",truth); }
/** * 記錄 */ publicMemoto record(){ Log.e(recorders[record_num] +"書曰",truth); Memoto memoto =newMemoto(truth); returnmemoto; }
/** * 史官遇害 */ public voidkillRecorder(){ truth="暴病而死"; Log.e("崔杼殺害"+recorders[record_num] +",妄圖篡改歷史",truth); }
/** * 前赴后繼 */ public voidrecordAgain(Memoto memoto){ this.truth= memoto.getTruth(); Log.e(recorders[record_num] +"嗣書",truth); }
} |
記載真相的備忘錄:
public classMemoto {
privateStringtruth;
publicMemoto(String truth) { this.truth= truth; }
publicString getTruth() { returntruth; } } |
備忘錄的操作者Caretaker:
public classCaretaker {
Memotomemoto;
public voidarchive(Memoto memoto){ this.memoto= memoto; }
public Memoto getMemoto(){ returnmemoto; }
} |
“在齊太史簡”的全過程:
History history_0 =newHistory(0); history_0.happen();
Caretaker caretaker =newCaretaker();
caretaker.archive(history_0.record()); history_0.killRecorder();
History history_1 =newHistory(1); history_1.recordAgain(caretaker.getMemoto()); history_1.killRecorder();
History history_2 =newHistory(2); history_2.recordAgain(caretaker.getMemoto()); history_2.killRecorder();
History history_3 =newHistory(3); history_3.recordAgain(caretaker.getMemoto()); |
無獨有偶,秦始皇滅趙之后第一件事就是把趙國的史書全部燒毀,可是那句“某年月日,秦王為趙王擊缻”還是被司馬遷記錄下來,千古流傳,這也是現實中的備忘錄模式的功勞。
Android源碼中的備忘錄模式
(1)onSaveInstanceState
當某個Activity變得容易被系統銷毀時,該Activity的onSaveInstanceState方法就會被執行,除非該Activity是被用戶主動銷毀的。
Android開發中如何利用備忘錄模式
(1)備忘錄模式給用戶提供了一種可以恢復狀態的機制,可以使用戶能夠比較方便地回到某個歷史的狀態。
(2)備忘錄模式實現了信息的封裝,使得用戶不需要關心狀態的保存細節。
需要注意的幾個問題
(1)備忘錄模式的缺點在于消耗資源。如果類的成員變量過多,勢必會占用比較大的資源,而且每一次保存都會消耗一定的內存。
網站標題:【設計模式與Android】備忘錄模式——在齊太史簡
分享地址:http://www.yijiale78.com/article8/jjpsip.html
成都網站建設公司_創新互聯,為您提供建站公司、網站建設、網站營銷、微信公眾號、、電子商務
廣告
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源:
創新互聯