行為型模式-備忘錄模式
阿新 • • 發佈:2018-12-21
參考: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
的資料。這一機制實際上就是onSaveInstanceState
和onRestoreInstanceState
。onSaveInstanceState
就是用來儲存當前Activity
的狀態,onRestoreInstanceState
則是用來恢復Activity
的狀態。
Activity
實際上就是負責人角色(
Caretaker
Activity
、
View
、
ViewGroup
、
Fragment
等都是發起人角色(
Originator
),他們各自負責需要儲存的資訊;而備忘錄角色(
Memoto
)則是
Bundle
類了,相關狀態資訊都是儲存在
Bundle
中。