設計模式之備忘錄模式

2022-03-21 08:31:10 字數 1793 閱讀 2833

名詞解釋:

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

使用場景:

你在玩遊戲,突然有事,此時如果關閉電腦,進度肯定木有了,然後你就點選儲存,關閉電腦出去了;完事之後,你又點選載入進度,又開始玩了,這個就是乙個標準的備忘錄模式場景。

必需元素:

發起人:負責建立乙個備忘錄,用以記錄當前時刻它的內部狀態,並可使用備忘錄恢復內部狀態 。發起人可根據需要決定備忘錄儲存發起人的哪些內部狀態。

備忘錄:負責儲存發起人物件的內部狀態,並可防止發起人以外的其他物件訪問備忘錄。備忘錄有兩個介面,管理者只能看到備忘錄的窄介面,它只能將備忘錄傳遞給其他物件。發起人能夠看到乙個寬介面,允許它訪問到先前狀態所需的所有資料。

管理者:負責儲存好備忘錄,不能對備忘錄的內容進行操作或檢查(其實就是來管理備忘錄資料的)。

其實說白了,備忘錄是乙個實體類,存放所有要備忘的狀態(屬性);而發起人呢也有自己的狀態(也可以成為屬性),當然也必須有用於儲存備忘錄和恢復備忘錄的方法;管理者中呢就是有乙個備忘錄的物件,當然是用於儲存發起人儲存的備忘錄也供發起人恢復使用。

上例子:

發起者:

///

///發起者

/// class

originator

set

}//////

建立備忘錄

/// ///

public

memento creatememento()

//////

恢復備忘錄

/// ///

public

void

setmemento(memento memento)

public

void

show()

}

備忘錄類:

///

///備忘錄

/// class

memento

}public memento(string

state)

}

管理者:

///

///管理者類(主要是隔離了發起者和備忘錄,主要就是存放了備忘錄物件)

/// class

caretaker

set

}}

使用:

//

定義發起者物件

originator o = new

originator();

//設定需要儲存的屬性

o.state = "on"

; o.show();

//定義管理者物件

caretaker c = new

caretaker();

//建立備忘錄

c.memento =o.creatememento();

//吸怪屬性

o.state = "

off"

; o.show();

//恢復備忘錄

o.setmemento(c.memento);

o.show();

console.read();

其實,這個備忘錄模式應該是蠻簡單的,就是乙個類儲存一些要儲存的資訊,可以進行儲存和恢復,最主要是我們通過乙個管理者類將發起者和備忘錄類進行了隔離。

設計模式之備忘錄模式

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