行為型設計模式 - 備忘錄模式詳解
|
備忘錄模式(Memento Pattern):在不破壞封裝性的前提下,捕獲一個物件的內部狀態,並在該物件之外儲存這個狀態。這樣就可以將該物件恢復到原先儲存的狀態
|
Originator(發起者):記錄當前的狀態,負責建立和恢復備忘錄
Memento(備忘錄):負責儲存發起者的狀態,在需要的時候提供發起人需要的狀態
Caretaker(管理者):管理備忘錄
|
(這裡我們以單角色、單狀態、單備份來演示,思想是相同的,無非是儲存資料結構上的區別)
備忘錄角色,定義了儲存狀態的變數,可以根據實際需求定義對應的儲存物件
public class Memento { private String state; public String getState() { return state; } public void setState(String state) { this.state = state; }}
發起者角色,儲存狀態,並且可以建立備忘錄和將狀態恢復為備忘錄的值
public class Originator { private String state; public String getState() { return state; } public void setState(String state) { this.state = state; } public Memento createMemento() { Memento memento = new Memento(); memento.setState(state); return memento; } public void restoreMemento(Memento memento) { this.state = memento.getState(); }}
管理者角色,管理了備忘錄
public class Caretaker { private Memento memento; public Memento getMemento() { return memento; } public void setMemento(Memento memento) { this.memento = memento; }}
測試類
public class Client { @Test public void test() { //設定初始狀態 Originator originator = new Originator(); originator.setState("狀態1"); System.out.println("初始狀態:" + originator.getState()); //建立管理者 Caretaker caretaker = new Caretaker(); caretaker.setMemento(originator.createMemento()); //更新狀態 originator.setState("狀態2"); System.out.println("跟新狀態:" + originator.getState()); //恢復狀態 originator.restoreMemento(caretaker.getMemento()); System.out.println("恢復狀態:" + originator.getState()); }}
執行結果
初始狀態:狀態1跟新狀態:狀態2恢復狀態:狀態1
|
優點:
- 給使用者提供了一種可以恢復狀態的機制,使使用者可以比較方便的回退到某個歷史的狀態
- 實現了資訊的封裝,使使用者不需要關心備忘錄中狀態的儲存細節
缺點:
- 在實際應用中,備忘錄模式都是多狀態和多備份的,發起人角色的狀態需要儲存到備忘錄物件中,對資源的消耗是比較嚴重的,為了節約記憶體,可以配合原型模式使用
應用場景:
- 遊戲的存檔
- CTRL + Z 撤銷
- 瀏覽器的後退
- 資料庫的事務管理
- ... ...
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69973775/viewspace-2690498/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 設計模式----備忘錄模式設計模式
- 無廢話設計模式(16)行為型模式--備忘錄模式設計模式
- 行為型模式:備忘錄模式模式
- 設計模式之備忘錄模式設計模式
- 設計模式 - 備忘錄模式 ( Memento )設計模式
- GoLang設計模式11 - 備忘錄模式Golang設計模式
- 極簡設計模式-備忘錄模式設計模式
- 簡說設計模式——備忘錄模式設計模式
- 行為型設計模式 - 狀態模式詳解設計模式
- 設計模式漫談之備忘錄模式設計模式
- 行為型設計模式 - 責任鏈模式詳解設計模式
- 行為型設計模式 - 觀察者模式詳解設計模式
- 19.java設計模式之備忘錄模式Java設計模式
- 設計模式 | 備忘錄模式及典型應用設計模式
- 折騰Java設計模式之備忘錄模式Java設計模式
- 備忘錄設計模式知識概括設計模式
- Rust語言之GoF設計模式:備忘錄Memento模式RustGo設計模式
- 設計模式(Swift) - 2.單例模式、備忘錄模式和策略模式設計模式Swift單例
- 抽絲剝繭——備忘錄設計模式設計模式
- 《設計模式七》備忘錄、模板方法、狀態模式及設計模式設計總結設計模式
- Swift 中的設計模式 #2 觀察者模式與備忘錄模式Swift設計模式
- 軟體設計模式學習(二十二)備忘錄模式設計模式
- 備忘錄模式(Memento)模式
- 行為型設計模式設計模式
- Java進階篇設計模式之十二 ---- 備忘錄模式和狀態模式Java設計模式
- 設計模式 第十章 備忘錄模式、直譯器模式、狀態模式設計模式
- 設計模式學習筆記(十八)備忘錄模式及其實現設計模式筆記
- 設計模式:可複用物件導向軟體及基礎:4-7 物件行為模式:備忘錄模式(Memento)設計模式物件
- 19_備忘錄模式模式
- (Java)設計模式:行為型Java設計模式
- 設計模式之中介者模式(行為型)設計模式
- 聊一聊設計模式(四)-- 行為型設計模式設計模式
- 設計模式(二十)——備忘錄模式(遊戲角色狀態恢復問題)設計模式遊戲
- 實驗 20:備忘錄模式模式
- 第 22 章 備忘錄模式模式
- Android備忘錄《單例模式》Android單例模式
- 設計模式:代理模式詳解設計模式
- 設計模式 - 代理模式詳解設計模式