大话设计模式--备忘录 Memento -- C++实现实例
1. 备忘录: 在不破坏封装性的前提下, 捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后可将该对象恢复到原先保存的状态。
Originator 发起人: 负责创建一个备忘录Memento,用以记录当前时刻它的内部状态,并可使用备忘录恢复内部状态。
Memento 备忘录: 负责储存Originator对象的内部状态,并可以防止Originator以外的其他对象访问备忘录Mementor。
Caretaker 管理者: 负责保存好备忘录Mementor,不能对备忘录的内容进行操作或检查。
Memento模式比较使用与功能比较复杂的,但需要维护或记录属性历史的类,或者需要保存的属性只是众多属性中的一个小部分, Originator可以根据
保存的Mementor信息还原到前一状态。
实例:
originator.h originator.cpp
#ifndef ORIGINATOR_H
#define ORIGINATOR_H #include <string>
#include <iostream>
#include "memento.h"
using namespace std; class Originator
{
public:
Originator();
void changeState();
Memento* createMemento();
void setMemento(Memento *memento);
void show(); private:
string state; }; #endif // ORIGINATOR_H
#include "originator.h" Originator::Originator()
{
this->state = "state_xxxx";
} void Originator::changeState()
{
state = "state_change";
} Memento* Originator::createMemento()
{
return (new Memento(state));
} void Originator::setMemento(Memento* memento)
{
state = memento->state;
} void Originator::show()
{
cout << "state: " << state << endl;
}
memento.h memento.cpp
#ifndef MEMENTO_H
#define MEMENTO_H #include <string>
#include <iostream>
using namespace std; class Memento
{
public:
Memento(string state);
string state; }; #endif // MEMENTO_H
#include "memento.h" Memento::Memento(string state)
{
this->state = state;
}
caretaker.h caretaker.cpp
#ifndef CARETAKER_H
#define CARETAKER_H #include "memento.h" class Caretaker
{
public:
Caretaker();
Memento *memento;
}; #endif // CARETAKER_H
#include "caretaker.h" Caretaker::Caretaker()
{
memento = NULL;
}
main.cpp
#include <iostream>
#include "originator.h"
#include "memento.h"
#include "caretaker.h"
using namespace std; int main()
{
cout << "Memento test!" << endl; Originator o;
o.show(); Caretaker c;
c.memento = o.createMemento(); o.changeState();
o.show(); o.setMemento(c.memento);
o.show(); return 0;
}
大话设计模式--备忘录 Memento -- C++实现实例的更多相关文章
- 大话设计模式--观察者模式 Observer -- C++ 实现实例
大话设计模式--1.观察者模式: 定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态发生变化时,会通知所有的 观察者对象,使他们能够自动更新自己. 使用场合: 当一 ...
- 大话设计模式--适配器模式 Adapter -- C++实现实例
1.适配器模式: 将一个类的接口转换为客户希望的另一个接口,使得原来由于接口不能一起工作的那些类一起工作. 适配器模式一般用于希望复用一些现存的类,但是接口又与复用环境要求不一致的情况. 适配器模式分 ...
- 深入浅出设计模式——备忘录模式(Memento Pattern)
模式动机 为了使软件的使用更加人性化,对于误操作,我们需要提供一种类似“后悔药”的机制,让软件系统可以回到误操作前的状态,因此需要保存用户每一次操作时系统的状态,一旦出现误操作,可以把存储的历史状态取 ...
- 大话设计模式Python实现-备忘录模式
备忘录模式(Memento Pattern):不破坏封装性的前提下捕获一个对象的内部状态,并在该对象之外保存这个状态,这样已经后就可将该对象恢复到原先保存的状态 下面是一个备忘录模式的demo: #! ...
- Java设计模式-备忘录模式(Memento)
主要目的是保存一个对象的某个状态,以便在适当的时候恢复对象,个人觉得叫备份模式更形象些,通俗的讲下:假设有原始类A,A中有各种属性,A可以决定需要备份的属性,备忘录类B是用来存储A的一些内部状态,类C ...
- 大话设计模式C++ 备忘录模式
备忘录(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将对象恢复到原先保存的状态. 角色: (1)Originator(发起人):创建盒子, ...
- 设计模式(18)--Memento(备忘录模式)--行为型
作者QQ:1095737364 QQ群:123300273 欢迎加入! 1.模式定义: 备忘录模式又叫做快照模式(Snapshot Pattern)或Token模式,是对象的行为模式. ...
- 大话设计模式--工厂模式 factory -- C++实现实例
实现<大话设计模式>的C++版本... 1. 工厂模式 使用的范围是 同一个基类,下面很多子类. (1)这里很容易出现的一个问题n多的子类继承自抽象基类,我们不得不在每次要用到子类的地方就 ...
- C++设计模式 - 备忘录模式(Memento)
状态变化模式 在组件构建过程中,某些对象的状态经常面临变化,如何对这些变化进行有效的管理?同时又维持高层模块的稳定?"状态变化"模式为这一问题提供了一种解决方案. 典型模式 Sta ...
随机推荐
- junit测试时报No runnable methods错误的解决方法
1.因为你@Test时import的是@org.testng.annotations.Test所以会报错 解决方法:改为import org.junit.Test;就可以了
- linux应用网址
APUE学习:(十三) [终篇] 一起学 Unix 环境高级编程 (APUE) 之 网络 IPC:套接字 linux应用学习笔记(已列目录供跳转):http://www.cnblogs.com/ggj ...
- dedecms增加自定义表单管理员
打开\dede\inc\grouplist.txt 添加 >>自定义表单 >f_List>列出表单 >f_New>新建表单 >f_Edit>编辑表单 & ...
- 使用虚拟环境 virtualenv
1.安装 $ sudo apt-get install python-virtualenv 2.重命名,一般虚拟环境会被命名为venv $ virtualenv venv 3. 激活 $ sour ...
- 利用github Pages和Jekyll搭建blog实践1
你必须要懂一点git和网页开发.安装了git,并且有github账户. github设计了Pages功能,允许用户自定义项目首页 github提供模板,允许站内生成网页,但也允许用户自己编写网页,然后 ...
- readonly const关键字
readonly 关键字与 const 关键字不同. const 字段只能在该字段的声明中初始化. readonly 字段可以在声明或构造函数中初始化. 因此,根据所使用的构造函数,readonly ...
- 一篇很不错的关于WPF DataGrid的文章,包含validation
https://www.codeproject.com/Articles/30905/WPF-DataGrid-Practical-Examples
- Linux下SVN安装与权限管理
cat /etc/redhat-release //查看系统版本号 CentOS release 7.1 (Final) 这里我们採用yum源安装方式: 1.安装svn yum install sub ...
- java面向对象编程知识点总结
一:今天完成 上午详细了解了java面向对象编程的一些细节,记录如下. 1)类 是一种引用类型,包含一个签名和一个主体,主体是放在花括号里面的成员,成员包括字段和方法,还有构造方法.初始化程序和嵌套类 ...
- 使用Zxing.net实现asp.net mvc二维码功能
新建一个html辅助类 public static class HtmlHelperExtensions { , , ) { var barcodeWriter = new BarcodeWriter ...