/* Originator * 负责创建一个备忘录Memento,用以记录当前时刻它的内部状态, * 并可使用备忘录恢复内部状态。Originator可根据需要决定 * Menmento存储Originator哪些状态。 class Originator { private: string state; public: void setState(string value) { state = value; } string getState() { return state; } Memento CreateMemento() { return new Memento(state); } void setMemento(Memento m) { state = m.state; } void Show() { // 显示数据 } }; /* Memento类: * 负责存储Originator对象的内部状态,并可防止Originator以外的其它对象 * 访问备忘录Memento。备忘录有两个接口,Caretaker只能看到备忘录的窄接 * 口,它只能将备忘录传递给其它对象。Originator能看到一个宽接口,允许 * 它访问返回到先前状态所需的所有数据。 */ class Memento { private: string state; public: Memento(string state) { this->state = state; } // get\set方法 }; /* 管理者(Caretaker)类: * 负责保存好备忘录,不能对备忘录内容进行操作或检查。 class Caretaker { private: Memento memento; public: // get\set方法 }; // 客户端 int main() { // Originator初始状态,属性为"On" Originator *o = new Originator(); o->state = "On"; o.Show(); // 保存状态时,由于有了很好的封装,可以隐藏Originator的实现细节 Caretaker *c = new Caretaker(); c->Memento = o->CreateMemento(); // 改变状态 o->state = "Off"; o->Show(); // 恢复初始状态 o->setMemento( c->Memento ); o.Show(); }