- 浏览: 765454 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (1045)
- 数据结构 (36)
- UML与设计模式 (42)
- c++ (87)
- rust (36)
- Qt (41)
- boost模板元编程 (43)
- Linux (77)
- 汇编 (4)
- 其它 (2)
- 烹饪 (3)
- unix c / socket (73)
- 软件工程 (4)
- shell (53)
- Python (37)
- c++ primer 5th(c++11) (22)
- 数据库/MySQL (27)
- 数据存储 (4)
- lisp (7)
- git (4)
- Utility (3)
- CDN与DNS (54)
- Http (53)
- php (7)
- nginx/lua/openresty (41)
- redis (11)
- TCP/IP (16)
- 互联网 (6)
- kernel (2)
- go (34)
- 区块链 (43)
- 比特股 (13)
- 以太坊 (23)
- 比特币 (23)
- 密码学 (10)
- EOS (53)
- DAG (1)
- docker (1)
- filecoin (7)
- solidity (65)
- ipfs (8)
- 零知识证明 (1)
- openzeppelin (3)
- java (1)
- defi (7)
- Ton (0)
最新评论
备忘录(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态.
备忘录模式比较适用于功能比较复杂的,但需要维护或记录属性历史的类,或者需要保存的属性只是众多属性中的一小部分时,Originator可以根据保存的Memento信息还原到前一状态.
备忘录模式比较适用于功能比较复杂的,但需要维护或记录属性历史的类,或者需要保存的属性只是众多属性中的一小部分时,Originator可以根据保存的Memento信息还原到前一状态.
#include <iostream> #include <map> using namespace std; class Player { public: int mHp; int mMp; int mAp; }; class Game { public: Game() { mCurrentPlayer.mAp = 10; mCurrentPlayer.mHp = 10; mCurrentPlayer.mMp = 10; mNum = 1; } ~Game(){} void showStatus() { cout << "当前角色,hp:" << mCurrentPlayer.mHp << ",mp:" << mCurrentPlayer.mMp << ",ap:" << mCurrentPlayer.mAp << endl; } void killNPC1() { mCurrentPlayer.mAp += 10; mCurrentPlayer.mHp += 10; mCurrentPlayer.mMp += 10; cout << "消灭1号怪物" << endl; } void killBoss1() { if(mCurrentPlayer.mHp<30) { cout << "实力不足,被boss1消灭" << endl; mCurrentPlayer.mHp = 10; return; } cout << "消灭boss1" << endl; } void killBoss2() { if(mCurrentPlayer.mHp<300) { cout << "实力不足,被boss2消灭" << endl; mCurrentPlayer.mHp = 10; return; } cout << "消灭boss2" << endl; } //创建存档 void createMemento(int num) { mNum = num; mPlayerMap.insert(make_pair<int,Player>(mNum,mCurrentPlayer)); cout << "将当前环境存档,编号:" << num << endl; } //档读存储 void loadMemento(const map<int,Player>& playerMap) { mPlayerMap.clear(); for(map<int,Player>::const_iterator iter = playerMap.begin(); iter!=playerMap.end();++iter) { mPlayerMap.insert(make_pair<int,Player>((*iter).first,(*iter).second)); } cout << "导入一个强力的存档" << endl; } //读取存档 void restoreMemento(int num) { for(map<int,Player>::const_iterator iter = mPlayerMap.begin(); iter!=mPlayerMap.end();++iter) { if((*iter).first==num) { mCurrentPlayer.mAp = (*iter).second.mAp; mCurrentPlayer.mHp = (*iter).second.mHp; mCurrentPlayer.mMp = (*iter).second.mMp; cout << "读取存档:" << num << endl; } } } private: Player mCurrentPlayer; map<int,Player> mPlayerMap; int mNum; }; int main() { Game* game = new Game; game->killNPC1(); game->createMemento(1); game->killBoss1(); game->restoreMemento(1); game->showStatus(); game->killNPC1(); game->restoreMemento(2); game->killBoss1(); game->killBoss2(); map<int,Player> m; Player seniorPlayer; seniorPlayer.mAp = 1000; seniorPlayer.mHp = 1000; seniorPlayer.mMp = 1000; m.insert(make_pair<int,Player>(1000,seniorPlayer)); game->loadMemento(m); game->restoreMemento(1000); game->killBoss2(); } 消灭1号怪物 将当前环境存档,编号:1 实力不足,被boss1消灭 读取存档:1 当前角色,hp:20,mp:20,ap:20 消灭1号怪物 消灭boss1 实力不足,被boss2消灭 导入一个强力的存档 读取存档:1000 消灭boss2
发表评论
-
桥接模式(Bridge)
2014-09-26 15:34 814桥接模式:将抽象与实现解耦,使得两者可以独立地变化,抽象部分的 ... -
访问者模式(Visitor)
2014-08-03 13:59 834访问者模式(Visitor),表示一个作用于某对象结构中的各元 ... -
解释器模式(interpreter)
2014-08-03 13:55 676解释器模式(interpreter),给定一个语言,定义它的方 ... -
享元模式(Flyweight)
2014-08-02 09:31 634享元模式(Flyweight):运用共享技术有效地支持大量细粒 ... -
中介者模式(Mediator)
2014-08-02 09:26 443中介者模式(Mediator):用一个中介对象来封装一系列的对 ... -
职责链模式(Responsibility)
2014-07-31 20:36 584职责链模式(Chain of Responsibility): ... -
合成/聚合利用原则
2014-07-29 20:56 587合成/聚合利用原则:尽量使用合成/聚合,尽量不要使用类继承 ... -
组合模式(Composite)
2014-07-27 10:15 431组合模式(Composite):将对象组合成树形结构以表示'部 ... -
事件委托(delegate)
2014-07-23 20:53 595委托机制的本质就是调用成员函数的函数指针,实现回调 委托就是 ... -
建造者模式(Builder)
2014-07-23 20:45 563建造者模式(Builder):将一个复杂对象的构建与它的表示分 ... -
外观模式(facade)
2014-07-20 09:31 625外观模式(facade):为子系统中的一组接口提供一个一致的界 ... -
迪米特法则
2014-07-19 18:23 406迪米特法则:如果两个类不必彼此直接通信,那么这两个类就不应当发 ... -
原型模式
2014-07-16 20:34 510原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创 ... -
里氏代换
2014-07-12 09:43 336里氏代换:一个软件实体如果使用的是一个父类的话,那么一定适用于 ... -
依赖倒转
2014-07-12 09:39 395依赖倒转:抽象不应该依赖细节,细节应该依赖抽象,说白了就是针对 ... -
开放-封闭原则
2014-07-12 09:33 560开放-封闭原则:是说软件实体(类,模块,函数等等)应该可以扩展 ... -
单一职责
2014-07-12 09:26 559单一职责原则(SRP),就一个类而言,应该仅有一个引起它变化的 ... -
MVC
2011-07-21 17:32 1013MVC是一种复合模式,结合了观察者,策略模式和组合模式。 要 ... -
代理模式(Proxy)
2011-07-19 15:47 924代理模式:为另一个对象提供一个替身或占位符以控制这个对象的访问 ... -
状态模式(State)
2011-07-13 17:33 877状态模式:允许对象在内部状态改变时改变它的行为,对象看起来好像 ...
相关推荐
备忘录模式(Memento Pattern)是软件设计模式中的一种行为模式,它的主要目的是在不破坏对象封装性的前提下,允许对象在特定时刻保存其内部状态,并能够在之后恢复到保存时的状态。这种模式广泛应用于撤销/重做功能...
备忘录模式主要涉及三个角色: 1. **发起人(Originator)**:需要保存其内部状态的对象。它创建并存储备忘录,也可以从备忘录恢复状态。 2. **备忘录(Memento)**:存储发起人的内部状态。备忘录是发起人的私有...
备忘录模式(Memento Pattern)是设计模式中的一种行为模式,主要目的是在不违反封装原则的情况下,保存一个对象的内部状态,以便在需要时能够恢复到先前的状态。这种模式通常用于实现撤销/重做功能或者在游戏中保存...
备忘录模式是一种行为设计模式,它允许在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将对象恢复到原先保存的状态。这种模式常用于需要记录用户操作历史或者游戏进度...
备忘录模式(Memento Pattern)是一种行为设计模式,它允许在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将对象恢复到先前的状态。这种模式在需要撤销/重做功能、...
备忘录模式是一种在软件工程中广泛使用的结构型设计模式,其主要目的是为了在不破坏封装性的前提下,能够安全地保存对象的状态,并在需要时恢复到先前保存的状态。这种模式通常用于那些需要记录和回滚操作的重要场景...
备忘录模式是一种设计模式,它在不破坏封装性的前提下,保存对象的内部状态,以便在需要的时候恢复。在C#中,备忘录模式常用于实现撤销/重做功能,或者在需要记录和恢复对象状态的情况下。下面将详细解释备忘录模式...
在Java中,备忘录模式通常包括三个关键角色:原始对象(Originator)、备忘录(Memento)和管理者(Caretaker)。原始对象是需要保存状态的对象,它创建并存储在备忘录中的状态。备忘录负责存储原始对象的状态,而...
备忘录模式的核心组件包括发起人(Originator)角色、备忘录(Memento)角色和照料者(Caretaker)角色。 发起人是拥有复杂状态的对象,它创建并恢复备忘录。在我们的示例代码中,可能有一个名为`Originator`的类,...
备忘录模式是一种设计模式,属于行为模式类型,它的主要作用是保存对象的状态,以便在需要的时候能够恢复到之前的状态。这种模式的核心在于提供一种方式,可以在不破坏封装的前提下,捕获并存储一个对象的内部状态,...
备忘录模式(Memento Pattern)是软件设计模式中的一种,属于行为模式。它提供了一种方式来恢复对象到之前的状态,即“撤销”操作。备忘录模式的核心思想是保存对象的内部状态,以便在需要时能恢复到这个状态,而...
备忘录模式是一种设计模式,它在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将对象恢复到原先保存的状态。这种模式常用于需要记录用户操作或者游戏进度等场景,允许...
备忘录模式是一种常用的设计模式,它在软件工程中扮演着重要的角色,特别是在需要保护对象内部状态不被外部篡改的场景下。备忘录模式的核心思想是提供一种方法来捕获一个对象的内部状态,并在该对象之外保存这个状态...
在Java中实现备忘录模式,我们通常会定义三个关键角色:原始对象(Originator)、备忘录(Memento)和照料者(Caretaker)。首先,原始对象创建并维护其状态,它知道如何创建备忘录,并且可以在需要时使用备忘录恢复...
备忘录模式是一种在软件工程中广泛使用的面向对象设计模式,它主要用来安全地保存对象的状态,以便在需要时能够恢复到先前的状态。备忘录模式的核心思想是封装对象的状态,将其保存到一个独立的对象(备忘录)中,而...
在C++中,备忘录模式通常包含三个角色:发起人(Originator)、备忘录(Memento)和照料者(Caretaker)。发起人是创建和恢复状态的对象,备忘录负责存储发起人的状态,而照料者则负责管理备忘录,避免对发起人状态...
备忘录模式(Memento Pattern)是一种设计模式,它允许对象在不破坏封装性的前提下,捕获并存储其内部状态,以便在需要时恢复到先前的状态。这种模式常用于撤销/重做功能,或者在注册过程中保存用户信息,防止因意外...
在Java中,备忘录模式通常包含三个角色:**发起人(Originator)**、**备忘录(Memento)**和**照料者(Caretaker)**。 1. **发起人(Originator)**:这是创建备忘录并需要恢复状态的对象。它知道如何创建备忘录...
备忘录模式是一种行为设计模式,它允许在不破坏封装性的前提下,捕获和恢复一个对象的内部状态。在C++中实现备忘录模式,可以有效地帮助开发者在程序运行过程中保存对象的状态,以便在需要时恢复到之前的状态,这...