(C++实现)——备忘录模式(Memento Pattern)
来源:互联网 发布:淘宝店铺改类别 编辑:程序博客网 时间:2024/05/01 04:08
概述:
我们玩单机游戏的时候总会遇到老婆大人的各位事情,一会去买瓶醋了,一会去打个酱油了,会耽误我们玩游戏的进程,但是此时我们能有“保存游戏”这个宝贝,我们的主基地不会在我们打酱油的时候被对手拆掉。
这“保存游戏”的功能其实就是备忘录模式的很好应用,她是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以就该对象恢复到原先保存的状态。这个其实也是我们的redo,undo所采用的模式。
类图和实例:
简单的模式实例:
- #include <iostream>
- #include <string>
- using namespace std;
- class Memento {
- private:
- string state;
- public:
- Memento()
- {
- state = "";
- }
- Memento(string state){
- this->state = state;
- }
- string getState() {
- return state;
- }
- void setState(string state) {
- this->state = state;
- }
- };
- class Originator {
- private :
- string state;
- public:
- Originator()
- {
- state = "";
- }
- string getState() {
- return state;
- }
- void setState(string state) {
- this->state = state;
- }
- Memento createMemento(){
- return Memento(this->state);
- }
- void restoreMemento(Memento memento){
- this->setState(memento.getState());
- }
- };
- class Caretaker {
- private :
- Memento memento;
- public :
- Memento getMemento(){
- return memento;
- }
- void setMemento(Memento memento){
- this->memento = memento;
- }
- };
- int main (int argc, char *argv[])
- {
- Originator originator;
- originator.setState("状态1");
- cout<<"初始状态:"<<originator.getState()<<endl;
- Caretaker caretaker;
- caretaker.setMemento(originator.createMemento());
- originator.setState("状态2");
- cout<<"改变后状态:"<<originator.getState()<<endl;
- originator.restoreMemento(caretaker.getMemento());
- cout<<"恢复后状态:"<<originator.getState()<<endl;
- }
适用性:
适用于功能比较复杂的,但需要记录或维护属性历史的类;或者需要保存的属性只是众多属性中的一小部分时Originator可以根据保存的Memo还原到前一状态。
优缺点:
优点:
1)当发起人角色的状态有改变时,有可能是个错误的改变,我们使用备忘录模式就可以把这个错误改变还原。
2)备份的状态是保存在发起人角色之外的,这样,发起人角色就不需要对各个备份的状态进行管理。
缺点:
1)如果备份的对象存在大量的信息或者创建、恢复操作非常频繁,则可能造成很大的性能开销。
LCL_data原创于CSDN.NET【http://blog.csdn.net/lcl_data/article/details/9745019】
其他设计模式文章请参考:我所理解的设计模式
- (C++实现)——备忘录模式(Memento Pattern)
- Memento Pattern(备忘录模式)
- 备忘录模式(Memento Pattern)
- 备忘录模式(Memento Pattern)
- 备忘录模式(Memento Pattern)
- 备忘录模式(Memento Pattern)
- 设计模式——备忘录(Memento Pattern)模式
- Java设计模式——备忘录模式(Memento Pattern)
- 我所理解的设计模式(C++实现)——备忘录模式(Memento Pattern)
- 我所理解的设计模式(C++实现)——备忘录模式(Memento Pattern)
- 撤销功能的实现——备忘录模式(Memento Pattern)
- 备忘录模式(Memento)—通风系统
- 备忘录模式(Memento Pattern)
- 备忘录模式(Memento Pattern)
- 备忘录模式(Memento Pattern)
- 备忘录模式 Memento Pattern
- 备忘录模式(Memento Pattern)
- 备忘录模式(Memento Pattern)
- 逆序数
- 日语学习 名词 + が + 形容词
- (C++实现)——迭代器模式(Iterator Pattern)
- ebs系统架构简介6——clone
- (C++实现)——中介者模式(Mediator Pattern)
- (C++实现)——备忘录模式(Memento Pattern)
- (C++实现)——状态模式(State Pattern)
- Timus1132(二次剩余方程求解)
- (C++实现)——策略模式(Strategy Pattern)
- (C++实现)——访问者模式(Visitor Pattern)
- java--异常处理
- 将计算机设置为wifi热点
- 受不鸟了,吐槽中国电视剧
- foj 1593 数字接力赛