備忘錄模式
定義:
備忘錄模式(Memento Pattern)在一個對象之外保存這個對象的某些狀態,以便在適當的時候恢復對象。備忘錄模式屬於行為型模式。
結構圖:
程式碼:
//Originator類
class Originator
{
private:
String state;
public:
void setState(String state)
{
this.state = state;
}
//創建一個備忘錄並保存狀態
Memento* CreateMemento()
{
return (new Memento(state));
}
//恢復狀態
void SetMemento(const Memento& cMemento )
{
state = cMemento.getstate();
}
}
//Memento類
class Memento
{
private:
String state;
public:
Memento(String state)
{
this.state = state;
}
//恢復方法
String* getstate()
{
return this.state;
}
}
//Memento類(管理者)為了符合迪米特原則
class CareTaker
{
private:
Memento* pMemento;
public:
void SetMemento(pMemento* pMemento)
{
this.pMemento = pMemento;
}
}
//客戶端
Originator cOriginator;
cOriginator.setState(“ok”);//設置狀態:ok
CareTaker cCareTaker;
cCareTaker.SetMemento(cOriginator.CreateMemento);//保存狀態給管理者
cOriginator.setState(“notok”);//設置狀態為:notok
cOriginator.SetMemento(cCareTaker.pMemento);//恢復狀態為ok
使用時機:
需要維護或者記錄歷史屬性的類;
需要保存部分屬性時(全部屬性請考慮原型模式);
優點:
1、給用戶提供了一種可以恢復狀態的機制,可以使用戶能夠比較方便地回到某個歷史的狀態。
2、實現了資訊的封裝,使得用戶不需要關心狀態的保存細節。
缺點:如果需要備份的狀態數據很大,會非常消耗記憶體資源。