#include <iostream>
#include <string> using namespace std; class Memento
{
public:
Memento(string sState) { m_sState = sState; } string GetState() { return m_sState; }
void SetState(string sState) { m_sState = sState; } private:
string m_sState;
}; class Originator
{
public:
Originator() : m_memento("") {} void Executor(string sDo)
{
cout<<sDo<<endl;
} void SetSate(const Memento& memento) { m_memento = memento; cout<<"current state:"<<m_memento.GetState()<<endl; }
Memento CurrentState()
{
return m_memento;
} private:
Memento m_memento;
}; class Caretaker
{
public:
Caretaker() : m_backupMemento("") { m_executor.SetSate(Memento("Initial state")); } void Begin()
{
m_backupMemento = m_executor.CurrentState();
m_executor.SetSate(Memento("ready for transaction"));
m_executor.Executor("begin transaction...");
} void Rollback()
{
m_executor.SetSate(Memento("rollback transaction"));
m_executor.Executor("rollback...");
m_executor.SetSate(m_backupMemento);
} private:
Originator m_executor;
Memento m_backupMemento;
}; int main(int argc, char *argv[])
{
Caretaker caretaker;
caretaker.Begin();
caretaker.Rollback(); return ;
}

Memento的更多相关文章

  1. C#设计模式系列:备忘录模式(Memento)

    1.备忘录模式简介 1.1>.定义 备忘录模式在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可以将该对象恢复到原先保存的状态. 1.2>.使用频率 ...

  2. 十一个行为模式之备忘录模式(Memento Pattern)

    定义: 在不破坏原有封装的情况下,捕获一个对象的内部状态,并在对象之外保存.当对象出错或者无效是,可以根据该备忘录进行恢复. 结构图: Originator:原发类,被记录的对象,包含若干内部状态.一 ...

  3. 备忘录模式(Memento Pattern)

    在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态. 备忘录模式主要思想是——利用备忘录对象来对保存发起人的内部状态,当发起人需要恢复原 ...

  4. C++设计模式-Memento备忘录模式

    Memento模式作用:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先保存的状态. UML图: Originator:负责创建一个备忘录Me ...

  5. 设计模式之美:Memento(备忘录)

    索引 意图 结构 参与者 适用性 效果 相关模式 实现 实现方式(一):Memento 模式结构样式代码. 别名 Token 意图 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这 ...

  6. 23.备忘录模式(Memento Pattern)

    using System; using System.Collections.Generic; namespace ConsoleApplication6 { /// <summary> ...

  7. 设计模式学习之备忘录模式(Memento,行为型模式)(19)

    假如我们已经记录一个人的个人信息,但是发现信息写错了,然后我先备份下再去修改,结果发现原来的信息是正确的,于是我就看备份的个人信息还原到初始的状态,下面我们用代码去实现 class Program { ...

  8. [工作中的设计模式]备忘录模式memento

    一.模式解析 备忘录对象是一个用来存储另外一个对象内部状态的快照的对象.备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态捕捉(Capture)住,并外部化,存储起来,从而可以在将来合适的时候把 ...

  9. 深入浅出设计模式——备忘录模式(Memento Pattern)

    模式动机 为了使软件的使用更加人性化,对于误操作,我们需要提供一种类似“后悔药”的机制,让软件系统可以回到误操作前的状态,因此需要保存用户每一次操作时系统的状态,一旦出现误操作,可以把存储的历史状态取 ...

  10. C#设计模式(23)——备忘录模式(Memento Pattern)

    一.引言 在上一篇博文分享了访问者模式,访问者模式的实现是把作用于某种数据结构上的操作封装到访问者中,使得操作和数据结构隔离.而今天要介绍的备忘者模式与命令模式有点相似,不同的是,命令模式保存的是发起 ...

随机推荐

  1. linux 查看占用端口并kill掉

    主要可以使用ps  命令 或 netstat 命令 weihong@data1:~/jd_parser/jd_parser$ ps aux | head USER PID %CPU %MEM VSZ ...

  2. Access“存储过程"参数顺序要与执行代码生成的参数顺序一致

    OleDbParameter olp; OleDbCommand cmd = new OleDbCommand("insertYjsData"); olp = new OleDbP ...

  3. editplus格式化xml文档

    使用editplus打开xml文档,发现文件内容没有格式化,非常难看,使用IE9打开这个xml文档是格式化的,但是IE9打开不能编辑. 在网上找了一些资料发现能够通过一个小插件来是editplus格式 ...

  4. C# 数据回滚

    public int GetExecteQuery(string strAddSql, string strUpdateSql, string strDelSql) { SqlConnection c ...

  5. CodeForces 602E【概率DP】【树状数组优化】

    题意:有n个人进行m次比赛,每次比赛有一个排名,最后的排名是把所有排名都加起来然后找到比自己的分数绝对小的人数加一就是最终排名. 给了其中一个人的所有比赛的名次.求这个人最终排名的期望. 思路: 渣渣 ...

  6. (easy)LeetCode 242.Valid Anagram

    Given two strings s and t, write a function to determine if t is an anagram of s. For example,s = &q ...

  7. DDL(Oracle)

    DDL       数据定义       建表       建视图 建其他 drop create table t (a varchar2 (10));可变字符串最大为10 transaction - ...

  8. IO/NIO

    1.转换流,Buffered BufferedWriter out=new BufferedWriter(new OutputStreamWriter(System.out)); BufferedRe ...

  9. ListView中item的最外层使用margin属性失效

    参考文章:http://stackoverflow.com/questions/16278159/why-linearlayouts-margin-is-being-ignored-if-used-a ...

  10. ibatis配置多表关联(一对一、一对多、多对多)

    iBatis的多表关联. ibatis的表关联,和数据库语句无关,是在程序中,把若干语句的结果关联到一起.这种关联形式,虽然在大数据量时是很奢侈的行为,但是看起来很干净,用起来也很方便. 这里用表lo ...