设计模式学习--备忘录模式
2017-03-13 22:45
363 查看
备忘录模式,在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
把要保存的细节给封装在了Memento中了,哪一天要更改保存的细节也不用影响客户端了。
应用:Memento模式比较适用于功能比较复杂的,但需要维护或记录属性历史的类,或者需要保存的属性只是众多属性中的一小部分时,Originator可以根据保存的Memento信息还原到前一状态。
#include <iostream>
using namespace std;
class State //状态存储箱
{
int vit; //体力
int atk; //攻击力
int def; //防御力
public:
State(int v, int a, int d):vit(v), atk(a), def(d){}; //构造函数
int getvit(){return vit;} //获取体力
int getatk(){return atk;} //获取攻击力
int getdef(){return def;} //获取防御力
};
class StateManger //状态管理
{
State* m_state; //用于存放状态
public:
void setstate(State* sta) //构造函数 传入状态
{
m_state = sta;
}
State* getstate() //获取状态
{
return m_state;
}
};
class GameRole //游戏角色
{
int vit; //体力
int atk; //攻击力
int def; //防御力
public:
void stateDisplay() //显示当前状态
{
cout<<"当前角色状态:"<<endl;
cout<<"体力:"<<vit<<endl;
cout<<"攻击力:"<<atk<<endl;
cout<<"防御力:"<<def<<endl;
}
void Initstate() //初始化状态
{
vit = 100;
atk = 100;
def = 100;
}
State* savestate() //存档
{
return (new State(vit, atk, def));
}
void recoverystate(State* memento) //读档
{
vit = memento->getvit();
atk = memento->getatk();
def = memento->getdef();
}
void fight() //攻打boss
{
vit = 0;
atk = 0;
def = 0;
}
};
int main()
{
GameRole* xiaoyan = new GameRole(); //创建游戏角色对象
xiaoyan->Initstate(); //初始化状态
xiaoyan->stateDisplay(); //显示当前状态
StateManger* Manger = new StateManger(); //创建档案管理对象
Manger->setstate(xiaoyan->savestate()); //存档
cout<<endl;
xiaoyan->fight(); //攻打boss
xiaoyan->stateDisplay(); //显示当前状态
cout
4000
<<endl;
xiaoyan->recoverystate(Manger->getstate()); //读档
xiaoyan->stateDisplay(); //显示当前状态
return 0;
}
显示结果:
[hjf@hjf 设计模式]$ ./a.out
当前角色状态:
体力:100
攻击力:100
防御力:100
当前角色状态:
体力:0
攻击力:0
防御力:0
当前角色状态:
体力:100
攻击力:100
防御力:100
把要保存的细节给封装在了Memento中了,哪一天要更改保存的细节也不用影响客户端了。
应用:Memento模式比较适用于功能比较复杂的,但需要维护或记录属性历史的类,或者需要保存的属性只是众多属性中的一小部分时,Originator可以根据保存的Memento信息还原到前一状态。
#include <iostream>
using namespace std;
class State //状态存储箱
{
int vit; //体力
int atk; //攻击力
int def; //防御力
public:
State(int v, int a, int d):vit(v), atk(a), def(d){}; //构造函数
int getvit(){return vit;} //获取体力
int getatk(){return atk;} //获取攻击力
int getdef(){return def;} //获取防御力
};
class StateManger //状态管理
{
State* m_state; //用于存放状态
public:
void setstate(State* sta) //构造函数 传入状态
{
m_state = sta;
}
State* getstate() //获取状态
{
return m_state;
}
};
class GameRole //游戏角色
{
int vit; //体力
int atk; //攻击力
int def; //防御力
public:
void stateDisplay() //显示当前状态
{
cout<<"当前角色状态:"<<endl;
cout<<"体力:"<<vit<<endl;
cout<<"攻击力:"<<atk<<endl;
cout<<"防御力:"<<def<<endl;
}
void Initstate() //初始化状态
{
vit = 100;
atk = 100;
def = 100;
}
State* savestate() //存档
{
return (new State(vit, atk, def));
}
void recoverystate(State* memento) //读档
{
vit = memento->getvit();
atk = memento->getatk();
def = memento->getdef();
}
void fight() //攻打boss
{
vit = 0;
atk = 0;
def = 0;
}
};
int main()
{
GameRole* xiaoyan = new GameRole(); //创建游戏角色对象
xiaoyan->Initstate(); //初始化状态
xiaoyan->stateDisplay(); //显示当前状态
StateManger* Manger = new StateManger(); //创建档案管理对象
Manger->setstate(xiaoyan->savestate()); //存档
cout<<endl;
xiaoyan->fight(); //攻打boss
xiaoyan->stateDisplay(); //显示当前状态
cout
4000
<<endl;
xiaoyan->recoverystate(Manger->getstate()); //读档
xiaoyan->stateDisplay(); //显示当前状态
return 0;
}
显示结果:
[hjf@hjf 设计模式]$ ./a.out
当前角色状态:
体力:100
攻击力:100
防御力:100
当前角色状态:
体力:0
攻击力:0
防御力:0
当前角色状态:
体力:100
攻击力:100
防御力:100
相关文章推荐
- HeadFirst 设计模式学习笔记22-- 备忘录(Memento)模式拾零
- 设计模式学习笔记(二十)——Memento备忘录
- 设计模式学习笔记——备忘录模式
- java/android 设计模式学习笔记(21)---备忘录模式
- “设计模式”学习之八:备忘录、观察者与状态(行为型)
- 设计模式学习之备忘录模式:象棋中“悔棋”操作
- 设计模式学习笔记--备忘录模式
- 备忘录模式 - 设计模式学习
- 设计模式学习笔记——备忘录模式
- 设计模式学习笔记--备忘录(Mamento)模式
- 设计模式学习(十七)————备忘录模式
- 设计模式学习-Memento(备忘录)
- HeadFir st 设计模式学习笔记22-- 备忘录(M emento)模式拾零
- 设计模式学习-Memento(备忘录)
- 设计模式学习笔记(十七)—Memento备忘录模式
- 设计模式学习笔记-备忘录模式
- 【HeadFirst 设计模式学习笔记】21 备忘录(Memento)模式拾零
- IOS设计模式学习(23)备忘录
- 设计模式学习笔记--备忘录模式
- 设计模式学习--备忘录模式