《設計模式之禪》——備忘錄模式

       定義:Without violating encapsulation, capture and externalize an object's internal state so that the object can be restored to this state later.(在不破壞封裝性的前提下,捕獲一個對象的內部狀態,並在該對象之外保存這個狀態。這樣以後就可將該對象恢復到原先保存的狀態。)

       備忘錄模式的通用類圖如圖所示。



       我們來看看類圖中的三個角色。

  • Originator發起人角色:記錄當前時刻的內部狀態,負責定義哪些屬於備份範圍的狀態,負責創建和恢復備忘錄數據。
  • Memento備忘錄角色:負責存儲Originator發起人對象的內部狀態,在需要的時候提供發起人需要的內部狀態。
  • Caretaker備忘錄管理員角色:對備忘錄進行管理、保存和提供備忘錄。


1.備忘錄模式的應用


1.1備忘錄模式的使用場景


  • 需要保存和恢復數據的相關狀態場景。
  • 提供一個可回滾的操作;比如word中的CTRL+Z組合鍵,IE瀏覽器中的後退按鈕,文件管理器上的backspace鍵等。
  • 需要監控的副本場景中。例如監控一個對象的屬性,但是監控又不應該作爲系統的主業務來調用,它只是邊緣應用,即使出現監控不準、錯誤報警也影響不大,因此一般的做法是備份一個主線程中的對象,然後由分析程序來分析。
  • 數據庫連接的事務管理就是用的備忘錄模式。


1.2備忘錄模式的注意事項


  • 備忘錄的生命期:備忘錄創建出來就要在“最近”的代碼中使用,要主動管理它的生命週期,建立就要使用,不適用就要立刻刪除其引用,等待垃圾回收器對它的回收處理。
  • 備忘錄的性能:不要在頻繁建立備份的場景中使用備忘錄模式(比如一個for循環中),原因有二:一是控制不了備忘錄建立的對象數量,二是大對象的建立要消耗資源的,系統的性能需要考慮。


1.3備忘錄模式的擴展


  • clone方式的備忘錄
  • 多狀態的備忘錄模式
  • 多備份的備忘錄


其它設計模式內容戳這裏

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章