備忘錄模式(Memento Pattern):在不破壞封裝性的前提下,捕獲一個對象的內部狀態,並在該對象以外保存這個狀態。這樣就能夠將該對象恢復到原先保存的狀態java
Originator(發起者):記錄當前的狀態,負責建立和恢復備忘錄數據庫
Memento(備忘錄):負責存儲發起者的狀態,在須要的時候提供發起人須要的狀態瀏覽器
Caretaker(管理者):管理備忘錄數據結構
(這裏咱們以單角色、單狀態、單備份來演示,思想是相同的,無非是存儲數據結構上的區別)測試
備忘錄角色,定義了存儲狀態的變量,能夠根據實際需求定義對應的存儲對象this
public class Memento { private String state; public String getState() { return state; } public void setState(String state) { this.state = state; } }
發起者角色,存儲狀態,而且能夠建立備忘錄和將狀態恢復爲備忘錄的值rest
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(); } }
管理者角色,管理了備忘錄code
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
優勢:
缺點:
應用場景: