设为首页 加入收藏

TOP

C++设计模式实现--备忘录(Memento)模式
2015-07-24 05:55:34 来源: 作者: 【 】 浏览:5
Tags:设计模式 实现 备忘录 Memento 模式

一. 备忘录模式

定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。

结构图:

\

使用范围:

Memento 模式比较适用于功能比较复杂的,但需要维护或记录属性历史的类,或者需要保存的属性只是众多属性中的一小部分时,OriginatZ??http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vciC/ydLUuPm+3bGjtOa1xCBNZW1lbnRvINDFz6K7udSttb3HsNK717TMrKGjPC9wPgo8cD4KPHN0cm9uZz60+sLro7o8L3N0cm9uZz48L3A+CgoKCjxzdHJvbmc+W2NwcF08L3N0cm9uZz4gdmlldwogcGxhaW5jb3B5CgoKCgo8b2wgc3RhcnQ9"1" class="dp-cpp">

  • //备忘录类
  • //负责存储 Originator 对象的内部状态
  • class Memento
  • {
  • //注意:备忘录类中的方法是私有的!!!!!!!
  • private:
  • //这是最关键的地方,将 Originator 为friend类
  • //这样 Originator 就可以访问 Memento 类的内部信息
  • friend class Originator;
  • Memento() {}
  • Memento(const string& sdt)
  • {
  • _sdt = sdt;
  • }
  • void SetState(const string& sdt)
  • {
  • _sdt = sdt;
  • }
  • string GetState()
  • {
  • return _sdt;
  • }
  • private:
  • string _sdt;
  • };
  • //原始类
  • //负责创建备忘录
  • class Originator
  • {
  • public:
  • Originator()
  • {
  • _sdt = "";
  • _mt = 0;
  • }
  • Originator(const string& sdt)
  • {
  • _sdt = sdt;
  • _mt = 0;
  • }
  • //创建备忘录,将当前信息保存在一个备忘录对象中
  • Memento* CreateMemento()
  • {
  • return new Memento(_sdt);
  • }
  • //恢复备忘录,将备忘录对象上的信息恢复出来
  • void RestoreToMemento(Memento* mt)
  • {
  • this->_sdt = mt->GetState();
  • }
  • string GetState()
  • {
  • return _sdt;
  • }
  • void SetState(const string& sdt)
  • {
  • _sdt = sdt;
  • }
  • void PrintState()
  • {
  • cout< _sdt<<"....."< }
  • private:
  • string _sdt;
  • Memento* _mt;
  • };
  • //测试代码
  • int main(int argc,char* argv[])
  • {
  • Originator* o = new Originator();
  • o->SetState("old"); //备忘以前的状态
  • o->PrintState();
  • Memento* m = o->CreateMemento(); //创建一个备忘录
  • o->SetState("new"); //修改状态
  • o->PrintState();
  • o->RestoreToMemento(m); //恢复修改前的状态
  • o->PrintState();
  • return 0;
  • }

    二. 说明

    1. Memento 负责存储 Originator 对象的内部状态,并可防止 Originator 以外的其它对象访问备忘录(具体实现方法,就是让其所有方法都为私有的)。

    2. Memento 声明 Originator 为它的友元类,这样 Originator 就可以访问它的所有函数,即对 Originator 是开放的。


  • 】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
    分享到: 
    上一篇HDU4417-Super Mario 下一篇HDU-3473Minimum Sum

    评论

    帐  号: 密码: (新用户注册)
    验 证 码:
    表  情:
    内  容: