设计模式-备忘录模式
备忘录模式(Memento):
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象回复到原先保存的状态。
Originator(发起人):负责创建一个备忘录Memento,用以记录当前时刻它的内部状态,并且使用备忘录恢复内部状态。Originator可根据需要决定Memento存储Originator的哪些内部状态。
Memento(备忘录):负责存储Originator对象的内部状态,并可防止Originator以外的其他对象访问备忘Memento。备忘录有两个接口,Caretaker只能看到备忘录的窄接口,它只能讲备忘录传递给其他对象。Originator能够看到一个宽接口,允许它访问返回到先前状态所需要的所有数据。
Caretaker(管理者):负责保存好备忘录Memento,不能对备忘录的内容进行操作或检查。
备忘录模式代码:
#pragma once
#include <string>
#include <iostream>
using namespace std;//备忘录(Memento)
class Cmemento
{
public:string m_strState;
public:Cmemento(string strState){m_strState = strState;}
};//发起人(Originator)类
class COriginator
{
public:string m_strState;
public:Cmemento * CreateMemento(){return new Cmemento(m_strState);}void SetMemento(Cmemento * pMemento){m_strState = pMemento->m_strState;}void Show(){cout<<"State="<<m_strState<<endl;}
};//管理者(Creataker)类
class CCaretaker
{
public:Cmemento *m_pMemento;
};
客户端使用代码:
#include "stdafx.h"
#include "MementoMode.h"
#include <windows.h>
using namespace std;int main()
{COriginator *pO = new COriginator();pO->m_strState = "On";pO->Show();CCaretaker *pC = new CCaretaker();pC->m_pMemento = pO->CreateMemento();pO->m_strState = "Off";pO->Show();pO->SetMemento(pC->m_pMemento);pO->Show();delete pO;delete pC->m_pMemento;delete pC;return 0;
}
运行结果:
OK上面就是备忘录模式,其实可以想成是某个软件的临时快照等等,但是上面的很多地方用了public,本身应该考虑set,get的,为了方便就直接public了,但是应该要清楚这么写对封装一点没有好处,而且写的时候也会很难受。今天又太晚了,我就不改了就上面那样吧,大家理解备忘录模式的思想就好。
设计模式-备忘录模式相关推荐
- Python设计模式-备忘录模式
Python设计模式-备忘录模式 代码基于3.5.2,代码如下; #coding:utf-8 #备忘录模式 import randomclass gameCharacter():vitality = ...
- Java设计模式(备忘录模式-解释器模式-状态模式-策略模式-职责链模式)
Java设计模式Ⅶ 1.备忘录模式 1.1 备忘录模式概述 1.2 代码理解 2.解释器模式 2.1 解释器模式概述 3.状态模式 3.1 状态模式概述 3.2 代码理解 4.策略模式 4.1 策略模 ...
- Java设计模式——备忘录模式
Java设计模式--备忘录模式 需求 游戏角色状态恢复问题 游戏角色有攻击力和防御力,在大战Boss前保存自身的状态(攻击力和防御力),当大战Boss后攻击力和防御力下降,从备忘录对象恢复到大战前的状 ...
- 设计模式-备忘录模式(Memento)-Java
设计模式-备忘录模式(Memento)-Java 目录 文章目录 1.前言 2.示例案例-可悔棋的中国象棋 3.备忘录模式概述 3.1.备忘录模式定义 3.2.备忘录模式结构 3.3.备忘录模式结构图 ...
- C++设计模式——备忘录模式(memento pattern)
博主看了许多文章和一些书,发现要么代码不全,要么对备忘录的理解有偏差,要么干脆根本就不是备忘录模式,经过博主查阅十余篇文章和详细研究书本备忘录模式,总结出这篇精华的c++备忘录模式文章,感兴趣的朋友可 ...
- java设计模式---备忘录模式
一.引子 俗话说:世上难买后悔药.所以凡事讲究个"三思而后行",但总常见有人做"痛心疾首"状:当初我要是--.如果真的有<大话西游>中能时光倒流的& ...
- 大话设计模式—备忘录模式
备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象.备忘录模式属于行为型模式.所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保 ...
- PHP设计模式——备忘录模式
声明:本系列博客参考资料<大话设计模式>,作者程杰. 备忘录模式又叫做快照模式或Token模式,在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对 ...
- 一天一个设计模式---备忘录模式
介绍:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可以将对象恢复到原先保存的状态. 场景:我们在平时玩单机游戏的时候,比如红白机的Pokemon–宠物小精灵, ...
- golang设计模式——备忘录模式
备忘录模式 当初学备忘录模式的时候,特别开心.这不就是游戏里的备份嘛!游戏关闭之后,重新开启,从上次结束的位置继续开始.但终归没有进入游戏行业,也没有机会用过备忘录模式. 备忘录模式:在不破坏封装性的 ...
最新文章
- 前端笔试题面试题记录(上)
- ECSHOP删除云服务
- shell命令 vxworks5.5_vxWorks shell命令
- Docker创建虚机和swarm
- 使用XmlTextWriter生成XML文件的方法
- es6-super关键字
- C++冒泡排序(初级版)
- 构建工具 —— Groovy 与 Gradle
- Windows编程入门
- 瀑布流效果Demo总结(4)之基于jquery+masonry.js的实现
- detach()函数的用法
- ubuntu20.04下搜狗输入法不能输中文问题解决
- 使程序默认以管理员权限运行(包括注册表修改法)
- 计算机一个小键盘按不出来怎么办,我的电脑键盘上面1234按不出来怎么办
- Android 使用adb查看和修改电池信息
- 352记--扬哥本纪
- 快速学会如何在linux上用户环境变量和系统环境变量
- 手动清除网卡IP的Linux命令
- 荐书 | 8 本热门 AI 原版好书,趁假期充电!
- watchdog linux 进程,watchdog