備忘錄模式(memento pattern):在不破壞封裝性的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。這樣就可以將該物件恢復到原先儲存的狀態
originator(發起者):記錄當前的狀態,負責建立和恢復備忘錄
memento(備忘錄):負責儲存發起者的狀態,在需要的時候提供發起人需要的狀態
caretaker(管理者):管理備忘錄
(這裡我們以單角色、單狀態、單備份來演示,思想是相同的,無非是儲存資料結構上的區別)
備忘錄角色,定義了儲存狀態的變數,可以根據實際需求定義對應的儲存物件
public class memento
public void setstate(string state)
}
發起者角色,儲存狀態,並且可以建立備忘錄和將狀態恢復為備忘錄的值
public class originator
public void setstate(string state)
public memento creatememento()
public void restorememento(memento memento)
}
管理者角色,管理了備忘錄
public class caretaker
public void setmemento(memento memento)
}
測試類
public class client
}
執行結果
初始狀態:狀態1
跟新狀態:狀態2
恢復狀態:狀態1
優點:缺點:應用場景: 行為型設計模式 備忘錄模式
在我們平時的開發工作中,很多場景需要我們備份和恢復,比如資料庫binlog日誌備份 mvcc多版本併發控制 瀏覽器的回退 chrome奔潰後重新開啟恢復之前的頁面。在gof 設計模式 定義如下 captures and externalizes an object s internal state ...
備忘錄模式 行為型
3 相關模式 1 備忘錄模式和命令模式 這兩個模式可以組合使用。命令模式實現中,在實現命令的撤銷和重做的時候,可以使用備忘錄模式,在命令操作的時候記錄下操作前後的狀態,然後在命令撇銷和重做的時候,直接使用相應的備忘錄物件來恢復狀態就可以了在這種撤銷的執行順序和重做的執行順序可控的情況下,備忘錄物件還...
備忘錄模式 行為型
3 相關模式 1 備忘錄模式和命令模式 這兩個模式可以組合使用。命令模式實現中,在實現命令的撤銷和重做的時候,可以使用備忘錄模式,在命令操作的時候記錄下操作前後的狀態,然後在命令撇銷和重做的時候,直接使用相應的備忘錄物件來恢復狀態就可以了在這種撤銷的執行順序和重做的執行順序可控的情況下,備忘錄物件還...