设计模式简单代码之Memento模式

来源:互联网 发布:手机淘宝评价怎么修改 编辑:程序博客网 时间:2024/04/29 20:03

Memento模式,也称为备忘录模式,作用是保存对象的状态,并在需要的时候恢复对象的状态。

这个模式相对比较简单,它有一个Originator(原生者),就是需要被保存状态以便恢复的那个对象;
一个Memento对象,这个对象主要是保存原生者的状态,并在适当的时间恢复到原生者里去。而这个适当的时间就是
由CareTaker(管理者)来决定的。

在现实中的应用最常见的就是实现系统的Undo操作了。

下面看一个简单的例子就可以明白了:

// Memento.cpp

#include <string>
#include 
<iostream>
using namespace std;

class Originator;

class Memento
{
public:
    
string GetState()
    
{
        
return m_state;
    }

    
void SetState(string &s)
    
{
        m_state 
= s;
    }

private:
    
string m_state;
}
;

class Originator
{
public:
    Memento
* CreateMemento()
    
{
        Memento 
*= new Memento();
        m
->SetState(m_state);
        
return m;
    }

    
void SetMemento(Memento *m)
    
{
        m_state 
= m->GetState();
    }

    
void SetState(string &s)
    
{
        m_state 
= s;
    }

    
string GetState()
    
{
        
return m_state;
    }


private:
    
string m_state;
}
;

// 这里的main就充当管理者
void main()
{
    Originator o;
    o.SetState(
string("状态1"));

    cout 
<< "原生者的初始状态:" << o.GetState() << endl;

    
// 取得状态
    Memento *pm;
    pm 
= o.CreateMemento();

    o.SetState(
string("状态2"));

    cout 
<< "原生者的现在状态:" << o.GetState() << endl;

    
// 恢复状态1
    o.SetMemento(pm);

    cout 
<< "恢复状态后:" << o.GetState() << endl; 
    
    delete pm;
    pm 
= NULL;
}
原创粉丝点击