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

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;
}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值