意圖:在不破壞封裝性的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態,這樣以後就可將該物件恢復到原先儲存的狀態。
乙個備忘錄(memento)是乙個物件,它儲存另乙個物件在某個瞬間的內部狀態,而後者稱為備忘錄的原發器(originator)
適用性:
必須保持某個物件在某個時刻的狀態
如果乙個用介面來讓其它物件這節得到這些狀態,將會暴露物件的實現細節並破壞物件的封裝性
示例圖:
示例**:
//線條類
class cline
//撤銷移動
void undomoveto()
private:
linestate
restorememento()
private:
linestate m_state;
};//線條備忘類
class clinememento
;//相對簡單的solver
class csolver
return m_pmem;
}public:
static csolver* instance()
private:
static csolver m_pinstance;
clinememento* m_pmem;
};也可以支援鍊錶形式的備忘錄,用於支援撤銷多個操作……
設計模式 Memento(備忘錄)
作用 在不破壞封裝性的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態.這樣以後就可將該物件恢復到原先儲存的狀態.uml結構圖 解析 memento模式中封裝的是需要儲存的狀態,當需要恢復的時候才取出來進行恢復.原理很簡單,實現的時候需要注意乙個地方 窄介面和寬介面.所謂的寬介面就是一般意...
設計模式 備忘錄模式(Memento)
主要目的是儲存乙個物件的某個狀態,以便在適當的時候恢復物件,個人覺得叫備份模式更形象些,通俗的講下 假設有原始類a,a中有各種屬性,a可以決定需要備份的屬性,備忘錄類b是用來儲存a的一些內部狀態,類c呢,就是乙個用來儲存備忘錄的,且只能儲存,不能修改等操作。original類是原始類,裡面有需要儲存...
設計模式 備忘錄模式(memento)
在不破壞封裝性的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可以將該物件恢復到原先儲存的狀態。memento 備份類,裡面包含部分或全部originator的屬性 便簽紙 caretaker 真正儲存備份的地方 便簽紙貼的地方 替答到。我也不知道怎麼就想到了這個。上課的時候...