您的位置:首页 > 游戏 > 游戏 > 公司网页如何免费制作_app界面模板免费下载_关键词在线采集_百度收录的网站多久更新一次

公司网页如何免费制作_app界面模板免费下载_关键词在线采集_百度收录的网站多久更新一次

2024/12/26 21:40:19 来源:https://blog.csdn.net/WSTONECH/article/details/144675792  浏览:    关键词:公司网页如何免费制作_app界面模板免费下载_关键词在线采集_百度收录的网站多久更新一次
公司网页如何免费制作_app界面模板免费下载_关键词在线采集_百度收录的网站多久更新一次

基本概念:

动机:

        在软件构建过程中某些对象的状态在转换过程中由于某种需要要求程序可以回溯到之前对象某个所处的状态;如文档编辑器的撤销动作、游戏的存档等。


定义:

        在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便于在不同时机可以切换到不同的状态中。

代码举例:

备忘录状态类:

        描述元发器所有可能变化的状态的类,这里以string字符串记录(实际中对象常可很方便的序列化)。

//备忘录状态类
class Memento
{string state;//..
public:Memento(const string & s) : state(s) {}string getState() const { return state; }void setState(const string & s) { state = s; }
};

元发起类:

        业务类,会有状态变化,在需要记录当前状态时可以Memento*createMemento()创建当前状态供备忘录管理类记录,在需要恢复某一状态时可以通过restoreMemento(Memento*m)恢复状态m。

//业务中 元发器
class Originator
{string state;//....
public:Originator() {}~Originator(){}//业务相关函数 会修改当前状态state/*...*///创建备忘录记录Memento* createMemento() {return new Memento(state);}//恢复备忘录void restoreMemento(Memento*m){state = m->getState();}};

备忘录管理类:

        记录元发器创建的状态,在元发器业务需要恢复某一状态时提供状态便于其恢复。

class MemManager
{
public:MemManager() {};~MemManager() {for (auto iter = m_MementoVec.begin(); iter != m_MementoVec.end(); iter++){delete (*iter);}}void setMomento(Memento* m) {m_MementoVec.push_back(m);}Memento* getMemento(int index){return m_MementoVec.at(index);}Memento* getLastMemento(){return m_MementoVec.at(m_MementoVec.size() - 1);}private:vector<Memento*>m_MementoVec;
};

调用示例:

int main()
{Originator orginator;MemManager memManger;//捕获对象状态,存储到备忘录memManger.setMomento(orginator.createMemento());//... 改变orginator状态memManger.setMomento(orginator.createMemento());//... 改变orginator状态//从备忘录中恢复最初状态orginator.restoreMemento(memManger.getMemento(0));//恢复最近一次备忘录 撤销操作orginator.restoreMemento(memManger.getLastMemento());
}

停车场项目中使用

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com