龙岩网上通缉犯名单,南昌seo服务,高校网站建设模板,名牌网站设计的图片1、备忘录模式的提出
在软件功能开发过程中#xff0c;某些对象的状态在转换过程中#xff0c;由于业务场景需要#xff0c;要求对象能够回溯到对象之前某个点的状态。如果使用一些共有接口来让其他对象得到对象的状态#xff0c;便会暴露对象的实现细节。备忘录模式是在不…1、备忘录模式的提出
在软件功能开发过程中某些对象的状态在转换过程中由于业务场景需要要求对象能够回溯到对象之前某个点的状态。如果使用一些共有接口来让其他对象得到对象的状态便会暴露对象的实现细节。备忘录模式是在不破坏对象封装性的前提下增加一个备忘录类用于保存捕获对象的内部状态。当该对象需要回溯到之前状态时只需调用备忘录接口获取之前的状态并设置状态。
2、需求描述
有一个设备信息该设备的状态有打开设备、打开app1、app2等操作。设计一个可以回溯设备状态信息的功能代码。
3、代码实现
1UML图如下 2代码实现如下:
#include iostream
#include stringclass Memento
{
private:std::string m_strState;
public:Memento(std::string state):m_strState(state){};std::string getState()const{return m_strState;}
};class DevInfo
{
private:std::string m_strState;public:void setState(const std::string state){m_strState state;}std::string getState()const{return m_strState;}Memento* createMemento(){return new Memento(m_strState);}void restoreMemento(Memento* memento){m_strState memento-getState();}
};class Client
{
private:DevInfo* m_devInfo{nullptr};Memento* m_memento{nullptr};public:Client(){m_devInfo new DevInfo();}~Client(){std::cout ~Clientstd::endl;delete m_devInfo;m_devInfo nullptr;delete m_memento;m_memento nullptr;}void setDevState(std::string state){m_devInfo-setState(state);std::cout setDevState: m_devInfo-getState() std::endl;}void saveDevState(){m_memento m_devInfo-createMemento();std::cout saveDevState std::endl;}void restoreDevState(){m_devInfo-restoreMemento(m_memento);std::cout restoreDevState: m_devInfo-getState() std::endl;}
};int main()
{Client obj;obj.setDevState(Open Dev);obj.setDevState(Open app 1);obj.setDevState(Open app 2);obj.saveDevState();obj.setDevState(Open app 3);obj.restoreDevState();return 0;
}程序运行结果如下