どういうもの?
- あるオブジェクトの任意の時点の状態を保存しておき、後でその状態にオブジェクトを戻す
例
典型的な構成要素
- Originator
- 自分の状態を保存したMementoを作成する
- 要求されたMementoに状態を戻す
- Memento
- Originatorの内部情報を保持する。
- MementoはOriginatorと親密な関係
- Caretaker
- Originatorの状態を保存したい場合、ある時点に戻したい場合はOriginatorに指示する。
- 保存するように指示を出した場合は、その時点の状態のMementoを受け取り、保持する。
コード
class Memento{
public:
Memento(int num):num(num){}
int getNum(void){return num;}
private:
int num;
};
class Number{
public:
Number(int num):num(num){}
int getNum(void){return num;}
void increment(void){num++;}
Memento* createMemento(void){
Memento *memento = new Memento(num);
return memento;
}
void restoreMemento(Memento *memento){
num = memento->getNum();
}
private:
int num;
};
int main(void){
Number number(10);
Memento *memento = number.createMemento();
for(int i=0;i<10;i++){
cout << number.getNum() << endl;
number.increment();
if(number.getNum()%10==0){
cout << "Restore" << endl;
number.restoreMemento(memento);
}
}
return 0;
}