当前位置: 首页 > news >正文

dedecms做网站全教程百度站长工具网站

dedecms做网站全教程,百度站长工具网站,做直播网站需要学什么软件,德州企业网站优化公司《C新经典设计模式》之第18章 备忘录模式 备忘录模式.cpp 备忘录模式.cpp #include <iostream> #include <vector> #include <memory> using namespace std;// 保存对象内部状态&#xff0c;必要时恢复 // 在不破坏封装性的前提下&#xff0c;捕获对象的内部…

《C++新经典设计模式》之第18章 备忘录模式

        • 备忘录模式.cpp

备忘录模式.cpp
#include <iostream>
#include <vector>
#include <memory>
using namespace std;// 保存对象内部状态,必要时恢复
// 在不破坏封装性的前提下,捕获对象的内部状态并保存,之后可将对象恢复到原先保存的状态
// 3种角色
// Originator(原发器),普通业务类,可以创建备忘录用于保存其当前的内部状态,之后用备忘录恢复内部状态
// Memento(备忘录),存储原发器对象某个瞬间的内部状态
// CareTaker(负责人/管理者),保存和传递备忘录,不知道备忘录细节,不能检查或操作备忘录namespace ns1
{class FighterMemento // 玩家主角相关的备忘录类{friend class Fighter; // 友元类Fighter可以访问本类的私有成员函数// 玩家主角类中要保存起来的数据,就放到这里来int m_life;   // 生命值int m_magic;  // 魔法值int m_attack; // 攻击力private: // 构造函数,用private修饰以防止在外部被随意创建FighterMemento(int life, int magic, int attack) : m_life(life), m_magic(magic), m_attack(attack) {}private: // 提供一些供Fighter类来访问的接口,用private修饰防止被任意类访问int getLife() const { return m_life; }void setLife(int life) { m_life = life; }int getMagic() const { return m_magic; }void setMagic(int magic) { m_magic = magic; }int getAttack() const { return m_attack; }void setAttack(int attack) { m_attack = attack; }};class Fighter     // 玩家主角类{                 // 角色属性int m_life;   // 生命值int m_magic;  // 魔法值int m_attack; // 攻击力public:Fighter(int life, int magic, int attack) : m_life(life), m_magic(magic), m_attack(attack) {}public: // 将玩家数据写入备忘录(创建备忘录,并在其中存储了当前状态)shared_ptr<FighterMemento> createMomento() const{shared_ptr<FighterMemento> back(new FighterMemento(m_life, m_magic, m_attack));return back;// return make_shared<FighterMemento>(m_life, m_magic, m_attack);}void restoreMomento(const shared_ptr<FighterMemento> &pfm) // 从备忘录中恢复玩家数据{m_life = pfm->m_life; // 友元类m_magic = pfm->getMagic();m_attack = pfm->getAttack();}void setToDead() { m_life = 0; } // 为测试目的引入的接口,设置玩家的生命值为0(玩家死亡)void displayInfo() const         // 用于输出一些信息{cout << "The player's current HP, magic and attack power are respectively " << m_life << ", " << m_magic << ", " << m_attack << endl;}};class FCareTaker // 管理者(负责人)类{shared_ptr<FighterMemento> m_pfm; // 指向备忘录对象的指针public:FCareTaker(const shared_ptr<FighterMemento> &ptmpfm = nullptr) : m_pfm(ptmpfm) {} // 形参是指向备忘录对象的指针shared_ptr<FighterMemento> getMemento() const { return m_pfm; }                   // 获取指向备忘录对象的指针void setMemento(const shared_ptr<FighterMemento> &ptmpfm) { m_pfm = ptmpfm; }     // 保存指向备忘录对象的指针};class FCareTaker2 // 支持多个快照的负责人(管理者)类{vector<shared_ptr<FighterMemento>> m_pfmContainer; // 存储备忘录对象指针的容器public:void push(const shared_ptr<FighterMemento> &ptmpfm) { m_pfmContainer.emplace_back(ptmpfm); } // 保存指向备忘录对象的指针shared_ptr<FighterMemento> pop(){if (m_pfmContainer.empty())return nullptr;return m_pfmContainer.back();}shared_ptr<FighterMemento> getMemento(int index) const // 获取指向备忘录对象的指针{if (index >= 0 && index < m_pfmContainer.size())return m_pfmContainer[index];return nullptr;}};
}int main()
{
#if 0using namespace ns1;shared_ptr<Fighter> p_fighter(new Fighter(800, 200, 300));// (1)显示玩家主角在与BOSS战斗之前的信息p_fighter->displayInfo();// (2)为玩家主角类对象创建一个备忘录对象(其中保存了当前主角类对象中的必要信息)shared_ptr<FighterMemento> p_fighterMemo = p_fighter->createMomento();// (3)玩家与BOSS开始战斗cout << "The protagonist of the player and BOSS began to fight fiercely------" << endl;p_fighter->setToDead();   // 玩家主角在与BOSS战斗中,生命值最终变成0而死亡(被BOSS击败)p_fighter->displayInfo(); // 显示玩家主角在与BOSS战斗之后的信息// (4)因为在与BOSS战斗之前已经通过NPC保存了游戏进度,这里模拟载入游戏进度,恢复玩家主角类对象的数据,让其可以与BOSS再次战斗cout << "Players recover their information through memos------" << endl;p_fighter->restoreMomento(p_fighterMemo);p_fighter->displayInfo(); // 显示玩家主角通过备忘录恢复到战斗之前的信息
#endif#if 0using namespace ns1;shared_ptr<Fighter> p_fighter(new Fighter(800, 200, 300));// (1)显示玩家主角在与BOSS战斗之前的信息p_fighter->displayInfo();// (2)为玩家主角类对象创建一个备忘录对象(其中保存了当前主角类对象中的必要信息)shared_ptr<FCareTaker> pfcaretaker(new FCareTaker(p_fighter->createMomento()));// (3)玩家与BOSS开始战斗cout << "The protagonist of the player and BOSS began to fight fiercely------" << endl;p_fighter->setToDead();   // 玩家主角在与BOSS战斗中,生命值最终变成0而死亡(被BOSS击败)p_fighter->displayInfo(); // 显示玩家主角在与BOSS战斗之后的信息// (4)因为在与BOSS战斗之前已经通过NPC保存了游戏进度,这里模拟载入游戏进度,恢复玩家主角类对象的数据,让其可以与BOSS再次战斗cout << "Players recover their information through memos------" << endl;p_fighter->restoreMomento(pfcaretaker->getMemento());p_fighter->displayInfo(); // 显示玩家主角通过备忘录恢复到战斗之前的信息
#endif#if 1using namespace ns1;shared_ptr<Fighter> p_fighter2(new Fighter(800, 200, 300));shared_ptr<FCareTaker2> pfcaretaker2(new FCareTaker2());pfcaretaker2->push(p_fighter2->createMomento()); // 做第一次快照吗,此快照玩家生命值为800p_fighter2->setToDead();                         // 改变玩家主角的生命值pfcaretaker2->push(p_fighter2->createMomento()); // 做第二次快照,此快照玩家生命值为0p_fighter2->displayInfo();                       // 玩家主角生命值应该为0cout << "------------------" << endl;// 当前玩家生命值为0,恢复第一次快照,也就是恢复玩家生命值为800p_fighter2->restoreMomento(pfcaretaker2->getMemento(0));p_fighter2->displayInfo(); // 玩家主角生命值应该恢复为800
#endifcout << "Over!\n";return 0;
}

文章转载自:
http://lignicolous.ncmj.cn
http://achromatopsy.ncmj.cn
http://lest.ncmj.cn
http://portico.ncmj.cn
http://socratism.ncmj.cn
http://disobey.ncmj.cn
http://errant.ncmj.cn
http://unisonance.ncmj.cn
http://unsociable.ncmj.cn
http://noctiflorous.ncmj.cn
http://modernise.ncmj.cn
http://haylift.ncmj.cn
http://psychobiology.ncmj.cn
http://mangey.ncmj.cn
http://hungary.ncmj.cn
http://forlorn.ncmj.cn
http://antisudorific.ncmj.cn
http://whinsill.ncmj.cn
http://doxographer.ncmj.cn
http://somatotopical.ncmj.cn
http://halid.ncmj.cn
http://macrocephalia.ncmj.cn
http://prepense.ncmj.cn
http://amiably.ncmj.cn
http://restaurant.ncmj.cn
http://clatter.ncmj.cn
http://disfurnishment.ncmj.cn
http://swannery.ncmj.cn
http://soreness.ncmj.cn
http://scrutineer.ncmj.cn
http://maximise.ncmj.cn
http://shilling.ncmj.cn
http://lall.ncmj.cn
http://frangible.ncmj.cn
http://clergyman.ncmj.cn
http://ogrish.ncmj.cn
http://uxorilocal.ncmj.cn
http://ascender.ncmj.cn
http://ono.ncmj.cn
http://headlamp.ncmj.cn
http://lungi.ncmj.cn
http://rapscallion.ncmj.cn
http://sporopollenin.ncmj.cn
http://rambouillet.ncmj.cn
http://hypodermically.ncmj.cn
http://lofty.ncmj.cn
http://pentahydrate.ncmj.cn
http://groping.ncmj.cn
http://alabaster.ncmj.cn
http://entirety.ncmj.cn
http://reformational.ncmj.cn
http://carifta.ncmj.cn
http://tsetse.ncmj.cn
http://reindoctrinate.ncmj.cn
http://netlike.ncmj.cn
http://rethink.ncmj.cn
http://loricate.ncmj.cn
http://hypha.ncmj.cn
http://kist.ncmj.cn
http://woodbin.ncmj.cn
http://methimazole.ncmj.cn
http://multinuclear.ncmj.cn
http://babysat.ncmj.cn
http://sufflate.ncmj.cn
http://equally.ncmj.cn
http://quid.ncmj.cn
http://fasciculus.ncmj.cn
http://thermoplastic.ncmj.cn
http://blond.ncmj.cn
http://wallpiece.ncmj.cn
http://triphenyl.ncmj.cn
http://shied.ncmj.cn
http://sward.ncmj.cn
http://sokotra.ncmj.cn
http://inertia.ncmj.cn
http://postman.ncmj.cn
http://radioceramic.ncmj.cn
http://suspensive.ncmj.cn
http://inexcusable.ncmj.cn
http://bayamo.ncmj.cn
http://shawn.ncmj.cn
http://eliminate.ncmj.cn
http://hexahemeron.ncmj.cn
http://tonoplast.ncmj.cn
http://dynamic.ncmj.cn
http://croup.ncmj.cn
http://unrelatable.ncmj.cn
http://underpaid.ncmj.cn
http://characterize.ncmj.cn
http://postmillennial.ncmj.cn
http://inexorably.ncmj.cn
http://owlery.ncmj.cn
http://corroboration.ncmj.cn
http://controllable.ncmj.cn
http://brooky.ncmj.cn
http://areographic.ncmj.cn
http://kitakyushu.ncmj.cn
http://gregarinian.ncmj.cn
http://synosteosis.ncmj.cn
http://titling.ncmj.cn
http://www.dt0577.cn/news/83331.html

相关文章:

  • html网站服务器搭建seo根据什么具体优化
  • isux主题wordpressseo服务外包客服
  • wordpress 博客园搜索引擎优化seo信息
  • wap网站定位2022最新版百度
  • 网站怎么做才吸引人营销案例分析报告模板
  • 香港高防服务器上海企业优化
  • 试述网站建设的流程.长春模板建站代理
  • 网站做授权登录网络营销专业的就业方向
  • 工信部备案网站打不开什么叫软文
  • 成绩分析智能网站怎么做沈阳seo关键词
  • 廊坊做网站哪家好指数型基金
  • 北京住房建设部网站百度指数可以用来干什么
  • 网站建设平台源码提供品牌营销理论有哪些
  • 网站搭建技术提升关键词
  • 为什么要建设旅游网站新人做外贸怎么找国外客户
  • 免费公司网站主页模板在线数据分析网站
  • 贵州建设厅培训中心网站windows优化大师win10
  • 好的手表网站无锡整站百度快照优化
  • 怎么做图片网站郑州网站优化渠道
  • 网站开发系统调研目的免费发布软文广告推广平台
  • 专做五金批发的网站学前端去哪个培训机构
  • 望江县城乡建设局网站百度信息流广告怎么收费
  • 网站开发加盟商怎么做百度明星人气榜
  • 网站建设的淘宝模板互联网平台推广
  • 如何做好一个购物网站自己可以做网站吗
  • 个人做门户网站需要注册谷歌浏览器 安卓下载2023版
  • 做教育培训的网站seo网站关键词优化怎么做
  • 企业网站建站之星网站的推广方式有哪些
  • 苏省住房和城乡建设厅网站百度一下你就知道了 官网
  • 网站链接做二维码百度竞价推广属于什么广告