天天看點

備忘錄模式

備忘錄模式是一種行為模式,在不破壞封閉的前提下,将對象目前的内部狀态儲存在對象之外,之後可以再次恢複到此狀态。典型的例子就是遊戲存檔和讀檔的這個行為。

備忘錄模式

Originator:發起者,負責建立一個備忘錄,并且可以記錄、恢複自身的内部狀态。可以根據需要決定<code>Memento</code>儲存自身的那些内部狀态

Memento:備忘錄,用于存儲<code>Originator</code>的狀态,防止<code>Originator</code>以外的的對象通路<code>Memento</code>

Caretaker:備忘錄管理者,負責存儲備忘錄,不能對備忘錄的内容進行操作和通路,隻能夠将備忘錄傳遞給其他對象。

發起者通過建立一個新的備忘錄對象來儲存自己的内部狀态。

備忘錄管理者,負責儲存備忘錄對象,但是從不修改(甚至不檢視)備忘錄對象的内容。

備忘錄,将發起人對象傳入的狀态存儲起來。

基本這就是備忘錄模式的結構了,可以看出其模式的封閉性,對于狀态得存儲隻有<code>Originator</code>知道

在Android開發中,備忘錄模式的典型就是<code>Activity</code>中的狀态儲存,也就是<code>onSaveInstanceState</code>和<code>onRestoreInstanceState</code>。當<code>Activity</code>不是正常退出,且<code>Activity</code>在随後的時間内被系統殺死之前回調用這兩個方法讓開發人員可以有機會存儲<code>Activity</code>相關的資訊,并且在下次傳回<code>Activity</code>的時候,恢複這些資料。通過這兩個函數,開發人員能夠在某些特殊場景下存儲與界面相關的資訊,提升使用者體驗。

備忘錄模式實在不破壞封裝的條件下,通過備忘錄對象(Memento)存儲另外一個對象内部狀态的快照,在将來合适的時候把這個對象還原到存儲起來的狀态。

優點

給使用者提供了一種可以恢複狀态的機制,可以是使用者能夠友善的回到某個曆史的狀态

實作了資訊的封裝,是的使用者不需要關心狀态的儲存細節

缺點

消耗資源,如果類的成員變量過多,勢必會占用比較大的資源,而且每一次儲存都會消耗一定的記憶體。

作者:MrTrying

連結:https://www.jianshu.com/p/78b519d39fe5

來源:簡書

簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權并注明出處。

繼續閱讀