设计模式-(Memento)在不破坏封装性的前提下,捕捉类内的一个状态信息,并根据这个信息进行恢复。
以下代码来源: 设计模式精解-GoF 23种设计模式解析附C++实现源码
//Memento.h
#pragma once #include<string> class Memento; class Originator{ public: typedef std::string State; Originator(); virtual ~Originator(); Originator(const State& st); Memento* createMemento(); void SetMemento(Memento* men); void RestoreMemento(Memento* mt); State Getstate(); void Setstate(const State&sdt); void PrintState(); protected: private: Memento* _mt; State _st; }; class Memento { public: protected: private: friend class Originator; typedef std::string state; Memento(); virtual ~Memento(); Memento(const state &sdt); void SetState(const state& sdt); state GetState(); state _st; };
//Memento.cpp
#include"Memento.h" #include<iostream> typedef std::string state; Originator::Originator() { _st = '\0'; _mt = 0; } Originator::Originator(const state & sdt) { _st = sdt; _mt = 0; } Originator::~Originator(){} Memento* Originator::createMemento() { return new Memento(_st); } void Originator::SetMemento(Memento* mem) { } state Originator::Getstate() { return _st; } void Originator::Setstate(const state&sdt) { _st = sdt; } void Originator::PrintState() { std::cout << this->_st << "...." << std::endl; } void Originator::RestoreMemento(Memento* mn) { this->_st = mn->GetState(); } Memento::Memento(){} Memento::~Memento(){} Memento::Memento(const state& sdt) { _st = sdt; } state Memento::GetState() { return _st; } void Memento::SetState(const state& sdt) { _st = sdt; }
//main.cpp
#include"Memento.h" #include<iostream> #include<string> int main(int args, char* argv) { Originator* o = new Originator(); o->Setstate("Old"); o->PrintState(); Memento* m = o->createMemento(); o->Setstate("New"); o->PrintState(); o->RestoreMemento(m); o->PrintState(); getchar(); return 0; }
标签:
c++
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】博客园携手 AI 驱动开发工具商 Chat2DB 推出联合终身会员
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何做好软件架构师
· 记录一次线上服务OOM排查
· Linux实时系统Xenomai宕机问题的深度定位过程
· 记一次 .NET某汗液测试机系统 崩溃分析
· 深度解析Mamba与状态空间模型:一图带你轻松入门
· 如何做好软件架构师
· 记录一次线上服务OOM排查
· SQL优化的这15招,真香!
· [.NET] 单位转换实践:深入解析 Units.NET
· itextpdf 找出PDF中 文字的坐标
2018-12-23 论文阅读笔记三十七:Grid R-CNN(CVPR2018)