当前位置: 首页 > 编程笔记 >

C++:备忘录模式

应瀚
2023-04-24

模式定义

在不破坏封装性的前提下,捕获、企对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。

备忘录模式的使用场景

● 需要保存和恢复数据的相关状态场景。

● 提供一个可回滚(rollback) 的操作; 比如Word中的CTRL+Z组合键, IE浏览器中的后

退按钮, 文件管理器上的backspace键等。

● 需要监控的副本场景中。 例如要监控一个对象的属性, 但是监控又不应该作为系统的

主业务来调用, 它只是边缘应用, 即使出现监控不准、 错误报警也影响不大, 因此一般的做法是备份一个主线程中的对象, 然后由分析程序来分析。

● 数据库连接的事务管理就是用的备忘录模式, 想想看, 如果你要实现一个JDBC驱

动, 你怎么来实现事务? 还不是用备忘录模式嘛

class Memento
{
	string state;
public:
	Memento(const string & s) : state(s) {}
	string getState() const { return state; }
	void setState(const string & s) { state = s; }
};

class Originator
{
	string state;
public:
	Originator() {}
	Memento createMomento() {
		Memento m(state);
		return m;
	}
	void setMomento(const Memento & m) {
		state = m.getState();
	}
};

int main()
{
	Originator orginator;
	Memento mem = orginator.createMomento();
	//从备忘录中恢复
	orginator.setMomento(mem);
}

 类似资料:
  • 主要内容:介绍,实现,Memento.java,Originator.java,CareTaker.java,MementoPatternDemo.java备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。 介绍 意图:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。 主要解决:所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先

  • 备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。 介绍 意图:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。 主要解决:所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。 何时使用:很多时候我们总是需要记录一个对象

  • 问题 你想预测对一个对象做出改变后的反应。 解决方案 使用备忘录模式(Memento Pattern)来跟踪一个对象的变化。使用这个模式的类会输出一个存储在其他地方的备忘录对象。 如果你的应用程序可以让用户编辑文本文件,例如,他们可能想要撤销上一个动作。你可以在用户改变文件之前保存文件现有的状态,然后回滚到上一个位置。 class PreserveableText class Mement

  • 简介 备忘录模式有两个目标: 储存系统关键对象的重要状态; 维护关键对象的封装。 单一职责原则告诉我们,设计时不要把保持状态的工作和关键对象混在一起。这个专门掌握状态的对象,就称为备忘录。 备忘录模式提供了一种状态恢复的实现机制,使得用户可以方便地回到一个特定的历史步骤,当新的状态无效或者存在问题时,可以使用存储起来的备忘录将状态复原,当前很多软件都提供了Undo(撤销)操作功能,就使用了备忘录模

  • 备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。 介绍 意图:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。 主要解决:所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。 何时使用:很多时候我们总是需要记录一个对象

  • 备忘录模式 备忘录模式的起源来自于撤销的基本操作。有过word软件操作经验的朋友,应该基本上都使用过撤销的功能。举个例子,假设你不小心删除了好几个段落的文字,这时候你应该怎么办呢?其实要做的很简单,单击一些【撤销】就可以全部搞定了。撤销按钮给我们提供了一次反悔的机会。 既然是撤销,那么我们在进行某种动作的时候,就应该创建一个相应的撤销操作?这个撤销操作的相关定义可以是这样的。 typedef st