1. 程式人生 > >行為型模式-備忘錄模式

行為型模式-備忘錄模式

參考:https://www.jianshu.com/p/c8a63849d629

1.定義

在不破壞封裝性的前提下,捕獲一個物件的內部狀態,並在該物件之外儲存這個狀態,這樣以後就可以將該物件恢復到先前儲存的狀態。

2.介紹

  • 備忘錄模式屬於行為型模式。
  • 備忘錄模式比較適合用於功能複雜,但是需要維護和紀錄歷史的地方,或者是需要儲存一個或者多個屬性的地方;在未來某個時刻需要時,將其還原到原來紀錄的狀態。

3.UML類圖

角色說明:
  • Originator(發起人角色):負責建立一個備忘錄(Memoto),能夠記錄內部狀態,以及恢復原來記錄的狀態。並且能夠決定哪些狀態是需要備忘的。
  • Memoto(備忘錄角色):將發起人(Originator)物件的內部狀態儲存起來;並且可以防止發起人(Originator)之外的物件訪問備忘錄(Memoto)。
  • Caretaker(負責人角色):負責儲存備忘錄(Memoto),不能對備忘錄(Memoto)的內容進行操作和訪問,只能將備忘錄傳遞給其他物件。

4.實現

以遊戲存檔為例子

5. 應用場景

  • 需要儲存物件的某一時刻的狀態時

6. 優點

  • 能夠讓狀態回滾到某一時刻的狀態
  • 實現了狀態儲存物件的封裝,使用者無需關心其實現細節。

7. 缺點

  • 要儲存的物件如果成員變數過多的話,資源消耗也會相應增多。

8. Android中的原始碼分析

Android中的Activity就提供了狀態儲存機制來保證Activity在被系統回收後能夠恢復當前Activity的資料。這一機制實際上就是onSaveInstanceStateonRestoreInstanceStateonSaveInstanceState就是用來儲存當前Activity的狀態,onRestoreInstanceState則是用來恢復Activity的狀態。

Activity實際上就是負責人角色( Caretaker
),負責儲存和恢復UI資訊; ActivityViewViewGroupFragment等都是發起人角色( Originator),他們各自負責需要儲存的資訊;而備忘錄角色( Memoto)則是 Bundle類了,相關狀態資訊都是儲存在 Bundle中。