在不破壞封閉的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可將該物件恢復到原先儲存的狀態。
uml類圖:
具體**:
public各模組說明:memento:備忘錄,儲存originator的物件狀態,儲存哪些應該由originator決定。class
originator
public
void
restorememento(memento m)
public
void
setstate(string state)
public
string getstate()
}public
class
memento
public
void
setstate(string state)
public
string getstate()
}public
class
caretaker
public
void
setmemento(memento memento)
}public
class
client
}456
123
originator:原發器,使用備忘錄儲存某一時刻的狀態,也可以使用備忘錄恢復某一時刻狀態。
caretaker:備忘錄管理者,儲存備忘錄內容,但不能改變和檢視備忘錄狀態。
適應場景:
儲存乙個物件在某乙個時刻的全部狀態或部分狀態,實現撤銷操作。
防止外界物件破壞乙個物件歷史狀態的封裝性,避免將物件歷史狀態的實現細節暴露給外界物件。
優缺點:
優點:更好的封裝性
簡化原發器
缺點:可能導致高開銷(頻繁訪問和建立備忘錄)
總結:
儲存和恢復原發器內部狀態。
設計模式之備忘錄模式
機器 public class machine public void startplay disc.setluminance 60 disc.settime 0 disc.setvolume 80 public void stopplay disc.setluminance 70 disc.set...
設計模式之備忘錄模式
定義 在不破壞封閉的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可將該物件恢復到原先儲存的狀態。備忘錄模式有三個角色 以儲存遊戲進度為例,退出遊戲前存檔,再進入遊戲就會顯示退出之前的狀態。示例 遊戲發起人類 public class game public state cr...
設計模式之 備忘錄模式
定義 在不破壞封裝性的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。這樣就可以將該物件 恢復到原先儲存的狀態。很好理解,就像我們以前打通關遊戲一樣,打通某個關卡,就會備份一下,不然根本通不了關。備忘錄 負責儲存發起人物件的內部狀態,在需要的時候提供發起人需要的內部狀態。public c...