设计模式-(Memento)在不破坏封装性的前提下,捕捉类内的一个状态信息,并根据这个信息进行恢复。
Posted fourmi_gsj
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式-(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; }
以上是关于设计模式-(Memento)在不破坏封装性的前提下,捕捉类内的一个状态信息,并根据这个信息进行恢复。的主要内容,如果未能解决你的问题,请参考以下文章