設計模式之備忘錄模式

2022-01-28 23:18:53 字數 1192 閱讀 8579

在不破壞封閉的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可將該物件恢復到原先儲存的狀態。

uml類圖:

具體**:

public

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

各模組說明:memento:備忘錄,儲存originator的物件狀態,儲存哪些應該由originator決定。

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...