備忘錄模式:在不破壞封裝性的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可將該物件恢復到原先儲存的狀態。說白了就是儲存功能,像我們玩遊戲時的及時儲存操作。
乙個備忘錄是乙個物件,它儲存另乙個物件在某個瞬間的內部狀態,而後者稱為備忘錄的原發器。當需要設定原發器的檢查點時,取消操作機制會向原發器請求乙個備忘錄。原發器用描述當前狀態的資訊初始化該備忘錄。只有原發器可以向備忘錄中訪問資訊,備忘錄對其他的物件是「不可見」的。
memento:備忘錄儲存原發器物件的內部狀態。原發器根據需要決定備忘錄儲存原發器的哪些內部狀態;防止原發器以外的其他物件訪問備忘錄。備忘錄實際上有兩個介面,管理者只能看到備忘錄的窄介面————它只能將備忘錄傳遞給其他物件。相反,原發器能夠看到乙個寬介面,允許它訪問返回到先前狀態所需的所有資料。理想的情況是只允許生成備忘錄的那個原發器訪問本備忘錄的內部狀態;
originator:原發器建立乙個備忘錄,用以記錄當前時刻它的內部狀態;我們使用備忘錄恢復內部狀態;
caretaker:負責儲存好備忘錄;但是,不能對備忘錄的內容進行操作或檢查。
乙個簡單例子:
#include #include using namespace std;
class memento
memento(string state)
string getstate()
void setstate(string state)
};class originator
string getstate()
void setstate(string state)
memento creatememento()
void restorememento(memento memento)
};class caretaker
void setmemento(memento memento)
};int main (int argc, char *argv)
{ originator originator;
originator.setstate("狀態1");
cout<
設計模式(十七) 備忘錄模式
一 概述 現實生活中的備忘錄是用來記錄某些要去做的事情,或者是記錄已經達成的共同意見的事情,以防忘記了。而在軟體層面,備忘錄模式有著相同的含義,備忘錄物件主要用來記錄乙個物件的某種狀態,或者某些資料,當要做回退時,可以從備忘錄物件裡獲取原來的資料進行恢復操作。備忘錄 memento 在不破壞封裝性的...
C 設計模式 備忘錄模式
應用 ifndef caretaker h define caretaker h include memento.h class caretaker void setmemento memento memento 備忘錄物件 private memento memento endif caretak...
C 設計模式 備忘錄模式
一.介紹 備忘錄模式 memento pattern 屬於行為型模式。它在不破壞封裝性的前提下,捕捉乙個物件的內部狀態,並在該物件之外儲存這個狀態,這樣以後就可將該物件恢復到原先儲存的狀態。二.實現 備忘錄顧名思義就是可以儲存多個資訊的工具。在該模式下,如果乙個物件出現了多種狀態,通過管理者的集合去...