備忘錄模式(memento pattern)儲存乙個物件的某個狀態,以便在適當的時候恢復物件。備忘錄模式屬於行為型模式。
意圖:
在不破壞封裝性的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。
主要解決:
所謂備忘錄模式就是在不破壞封裝的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。
這樣可以在以後將物件恢復到原先儲存的狀態。
何時使用:
很多時候我們總是需要記錄乙個物件的內部狀態,這樣做的目的就是為了允許使用者取消不確定或者錯誤的操作。
能夠恢復到他原先的狀態,使得他有"後悔藥"可吃。
如何解決:
通過乙個備忘錄類專門儲存物件狀態。
關鍵**:
客戶不與備忘錄類耦合,與備忘錄管理類耦合。
應用例項:
1、後悔藥。
2、打遊戲時的存檔。
3、windows 裡的 ctri + z。
4、ie 中的後退。
4、資料庫的事務管理。
優點:
1、給使用者提供了一種可以恢復狀態的機制,可以使使用者能夠比較方便地回到某個歷史的狀態。
2、實現了資訊的封裝,使得使用者不需要關心狀態的儲存細節。
缺點:消耗資源。如果類的成員變數過多,勢必會占用比較大的資源,而且每一次儲存都會消耗一定的記憶體。
使用場景:
1、為了符合迪公尺特原則,還要增加乙個管理備忘錄的類。
2、為了節約記憶體,可使用原型模式+備忘錄模式。
#pragma once
#include#include// 備忘錄
class mementopattern
mementopattern(std::string name, int age) :m_name(name), m_age(age) {}
~mementopattern() {}
void setname(std::string name)
void setage(int age)
std::string getname(void)
int getage(void)
private:
std::string m_name;
int m_age;
};//人
class person
person(std::string name, int age) :m_name(name), m_age(age)
~person() {}
void setname(std::string name)
void setage(int age)
std::string getname(void)
int getage(void)
// 建立備忘錄
mementopattern* creatmemento(void)
// 從備忘錄恢復
void replymemento(void)
// 過載乙個版本
void replymemento(mementopattern* mementopattern)
void printinf(void)
int maintest2(void)
int main(void)
設計模式學習筆記 備忘錄模式
定義 在不破壞封裝性的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態,這樣以後就可以將該物件恢復到原先儲存的狀態。備忘錄模式主要是對某個物件的狀態的備份,備份的主要是物件當前的屬性值,即成員變數的值,成員變數可以有多個,而且可以備份同乙個物件的多種不同狀態,即同乙個物件可以同時有多個備份...
設計模式筆記 備忘錄模式
在不破壞封裝性的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態,便於將該物件恢復到原先儲存的狀態。originator 發起人角色 記錄當前時刻的內部狀態,負責定義哪些屬於備份範圍的狀態,負責建立和恢復被萬福路資料 public class originator public void ...
設計模式學習 備忘錄模式
備忘錄模式 在不破壞封裝性的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態,這樣以後就可以將該物件恢復到原先儲存的狀態 originator 發起人,負責建立乙個備忘錄memento,用以記錄當前時刻他的內部狀態,並可使用備忘錄恢復內部狀態,originator可根據需要覺得mement...