您的位置:首页 > 其它

备忘录模式

2013-05-07 14:08 127 查看
#include <iostream.h>

#include <string.h>

#include <afx.h>

#include <vector>

using namespace std;

class Memento

{

public: //复制的数据是public

    int m_vitality; //生命值  

    int m_attack;   //进攻值  

    int m_defense;  //防守值 

public:

 Memento(int vitality, int attack, int defense)

 {

  m_vitality = vitality;

  m_attack   = attack;

  m_defense  = defense;

 }

    Memento& operator=(const Memento &memento)  

    { 

        m_vitality = memento.m_vitality; 

        m_attack = memento.m_attack; 

        m_defense = memento.m_defense; 

        return *this; 

    } 

};

class Originator

{

    int m_vitality; 

    int m_attack; 

    int m_defense; 

public:

 Originator(): m_vitality(100),m_attack(100),m_defense(100) {} 

    Memento Save()  //保存进度,只与Memento对象交互,并不牵涉到Caretake  

    {  

        Memento memento(m_vitality, m_attack, m_defense); 

        return memento; 

    } 

    void Load(Memento memento)  //载入进度,只与Memento对象交互,并不牵涉到Caretake  

    { 

        m_vitality = memento.m_vitality; 

        m_attack = memento.m_attack;  

        m_defense = memento.m_defense; 

    } 

    void Show() { cout<<"vitality : "<< m_vitality<<", attack : "<< m_attack<<", defense : "<< m_defense<<endl; } 

    void Attack() { m_vitality -= 10; m_attack -= 10;  m_defense -= 10; } 

};

class Caretaker

{

public: 

    Caretaker() {} 

    void Save(Memento menento) { m_vecMemento.push_back(menento); } 

    Memento Load(int state) { return m_vecMemento[state];}

 void delete_menento(int state) {m_vecMemento.erase(m_vecMemento.begin()+state);}

private: 

    vector<Memento> m_vecMemento; 

};

int main()

{

 int i=0;

    Caretaker caretake; 

    Originator role;  

    role.Show();   //初始值  

    caretake.Save(role.Save()); //保存状态0  

    role.Attack();    

    role.Show();  //进攻后  

 caretake.Save(role.Save()); //保存状态1  

    role.Attack();    

    role.Show();  //进攻后  

 caretake.Save(role.Save()); //保存状态2  

    role.Attack();    

    role.Show();  //进攻后  

 caretake.Save(role.Save()); //保存状态3 

    caretake.delete_menento(1);

 while(i<4)

 {

  role.Load(caretake.Load(i)); //载入状态   

  role.Show();  //恢复到状态0

  i++;

 }

    return 0; 

 cout<<"\nOK\n";

 return 1;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  设计模式