備忘錄模式就是在不破壞封裝的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態,這樣可以在以後將物件恢復到原先儲存的狀態。
主要目的是儲存乙個物件的某個狀態,以便在適當的時候恢復物件,個人覺得叫備份模式更形象些,通俗的講下:假設有原始類a,a中有各種屬性,a可以決定需要備份的屬性,備忘錄類b是用來儲存a的一些內部狀態,類c呢,就是乙個用來儲存備忘錄的,且只能儲存,不能修改等操作。
備忘錄模式
發起人(originator)角色
建立乙個含有當前的內部狀態的備忘錄物件,使用備忘錄物件儲存其內部狀態。
備忘錄(memento)角色
將發起人(originator)物件的內戰狀態儲存起來。備忘錄可以根據發起人物件的判斷來決定儲存多少發起人(originator)物件的內部狀態。備忘錄可以保護其內容不被發起人(originator)物件之外的任何物件所讀取。
備忘錄有兩個等效的介面:
● 窄介面:負責人(caretaker)物件(和其他除發起人物件之外的任何物件)看到的是備忘錄的窄介面(narrow inte***ce),這個窄介面只允許它把備忘錄物件傳給其他的物件。
● 寬介面:與負責人物件看到的窄介面相反的是,發起人物件可以看到乙個寬介面(wide inte***ce),這個寬介面允許它讀取所有的資料,以便根據這些資料恢復這個發起人物件的內部狀態。
負責人(caretaker)角色
負責儲存備忘錄物件,不檢查備忘錄物件的內容。
優點
1、 給使用者提供了一種可以恢復狀態的機制。可以是使用者能夠比較方便地回到某個歷史的狀態。
2、 實現了資訊的封裝。使得使用者不需要關心狀態的儲存細節。
缺點
消耗資源。如果類的成員變數過多,勢必會占用比較大的資源,而且每一次儲存都會消耗一定的記憶體。
適用場景
1、 需要儲存乙個物件在某乙個時刻的狀態或部分狀態。
2、 如果用乙個介面來讓其他物件得到這些狀態,將會暴露物件的實現細節並破壞物件的封裝性,乙個物件不希望外界直接訪問其內部狀態,通過負責人可以間接訪問其內部狀態。
總結
1、 備忘錄模式可以實現在不破壞封裝的前提下,捕獲乙個類的內部狀態,並且在該物件之外儲存該物件的狀態,保證該物件能夠恢復到歷史的某個狀態。
2、 備忘錄模式實現了內部狀態的封裝,除了建立它的原發器之外其他物件都不能夠訪問它。
3、 備忘錄模式會占用較多的記憶體,消耗資源。
初學第一季
要增強體力,只有運動 要豐富知識,就只有讀書 鳥哥。學習linux也有段時間了,但是期間看了關於arm方面的書籍,及作業系統方面的書,linux用虛擬機器vm裝的,平時疏於聯絡。在鳥哥的linux書中從新開始學習,打下基礎。x window system 視窗系統名 由mit 所開發的一種流通的視窗...
自我反思 第一季
又來寫點東西了。考完了,有空了。最近總是在剖析自己。發現自己真是乙個 活在未來的人 以前這樣,現在還是這樣,人的性格真還是一樣難以改變的東西。現在我就在乙個三岔口,也許更多口。豬 gg說,不就是換個工作嘛,沒什麼了不起的。可是我總是在擔心未來。不做設計怕技術丟了,做設計又覺得沒有什麼進步的空間,想鍛...
vscode 報錯第一季
使用vscode寫vue時,遇到以下報錯 this relative module was not found 解決方法 此時在listorganizationcode.vue存在import func from vue temp vue editor bridge 將其刪除即可.引入此vue te...