`
gengu
  • 浏览: 86769 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

备忘录模式

 
阅读更多

我更喜欢把它叫做备份模式

 

考虑这样一种场景:在我们做实验的时候,我们必须保证一步一步的做,并且在实验当前必须保证我前面的步骤都是正确的?不然如果出了问题,你都不知道是哪一步出的问题,好吧,如果你能保证前面的都正确,那么你在做下一步的时候,就要考虑我是不是能把情况恢复到这里,因为你下一步可能出错,所以你要有恢复的能力啊!这样你就得懂得备份,如果程序在下一步出现问题,你就用备份恢复一下。

 

好吧,我可以将当前状态备份起来不就行了嘛?

 

备忘录模式的定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可以将对象恢复到原先保存的状态。

 

备忘录模式的三个角色:

Originator 发起人角色

记录当前时刻得内部状态,负责定义那些属于备份范围的状态,负责创建和恢复备忘录数据

MeMennto  备忘录角色

负责存储当前的对象的内部状态,在需要的时候提供发起人保存起来的内部状态

Caretaker  备忘录管理员角色,它可以让我们在场景类里面不知道备忘录角色的存在,直接使用管理员就可以了。

 

package com.gengu.备忘录;

/**
 * 现在用实验类模拟我们的场景
 * 实验中所有一个状态,当我们在往下去做一个实验的时候总是希望能正确
 * 不过错误是在所难免的,那么我们在实验失败的时候总是希望能回到上次正确的地方再做尝试
 * 那么这种应用刚好可以被备忘录模式所使用
 * */
public class Experiment {

	private String state = "到目前为止还是成功的";

	public String getState() {
		return state;
	}

	public void setState(String state) {
		this.state = state;
	}
	
	//设置备份
	public  Memento createMemento(){
		return new Memento(this.state);
	}
	//恢复一个备份
	public  void restoreMemento(Memento memento){
		this.setState(memento.getState());
	}
}
 
package com.gengu.备忘录;

/**
 * 这个就是备忘录
 * */
public class Memento {

	//实验的状态
	private String state = "";
	public String getState() {
		return state;
	}
	public void setState(String state) {
		this.state = state;
	}
	public Memento(String state){
		this.state = state;
	}
}
 
package com.gengu.备忘录;

public class Manager {

	Memento memento = null;

	public Memento getMemento() {
		return memento;
	}

	public void setMemento(Memento memento) {
		this.memento = memento;
	}
	
}

 场景类

package com.gengu.备忘录;

public class Client {

	public static void main(String[] args) {
		//现在做实验
		Experiment experiment = new Experiment();
		System.out.println("没做之前的状态为"+experiment.getState());
		//做一个备份
		Manager manager = new Manager();
		manager.setMemento(experiment.createMemento());
		experiment.setState("失败了");
		System.out.println("继续下一步的时候发现"+experiment.getState());
		//下面一步就是恢复现场
		experiment.restoreMemento(manager.getMemento());
		System.out.println("又将实验的状态恢复成"+experiment.getState());
	}
}

 

备忘录模式我更愿意叫他备份模式,备份的作用就是为了恢复现场,他主要使用在需要保存和恢复数据的相关状态场景,提供一个可回滚的操作,就想CTRL+z的操作。

 

 

分享到:
评论
2 楼 ljl_ss 2012-08-17  
其实在被修改的对象改变之前将对像clone一份压入栈 要恢复的时候进行出栈就是你想做的吧
1 楼 ljl_ss 2012-08-17  
package com.gengu.备忘录

相关推荐

    备忘录模式.rar备忘录模式.rarjava设计模式

    备忘录模式是一种行为设计模式,它允许在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将对象恢复到原先保存的状态。这种模式常用于需要记录用户操作历史或者游戏进度...

    设计模式-备忘录模式(讲解及其实现代码)

    备忘录模式是一种在软件工程中广泛使用的面向对象设计模式,它主要用来安全地保存对象的状态,以便在需要时能够恢复到先前的状态。备忘录模式的核心思想是封装对象的状态,将其保存到一个独立的对象(备忘录)中,而...

    java设计模式-备忘录模式源代码

    备忘录模式是一种在软件工程中广泛使用的面向对象设计模式,它主要用来安全地保存对象的状态,以便在需要时能够恢复到先前的状态。这个模式的名字来源于我们日常生活中使用的备忘录,它记录了一些重要的信息,当需要...

    设计模式之备忘录模式

    备忘录模式(Memento Pattern)是软件设计模式中的一种,属于行为模式。它提供了一种方式来恢复对象到之前的状态,即“撤销”操作。备忘录模式的核心思想是保存对象的内部状态,以便在需要时能恢复到这个状态,而...

    设计模式之备忘录模式,内含可运行代码及详细解释

    备忘录模式是一种常用的设计模式,它在软件工程中扮演着重要的角色,特别是在需要保护对象内部状态不被外部篡改的场景下。备忘录模式的核心思想是提供一种方法来捕获一个对象的内部状态,并在该对象之外保存这个状态...

    备忘录模式Demo

    备忘录模式是一种设计模式,它在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将对象恢复到原先保存的状态。这种模式常用于需要记录用户操作或者游戏进度等场景,允许...

    设计模式_备忘录模式.zip

    备忘录模式是一种在软件工程中广泛使用的结构型设计模式,其主要目的是为了在不破坏封装性的前提下,能够安全地保存对象的状态,并在需要时恢复到先前保存的状态。这种模式通常用于那些需要记录和回滚操作的重要场景...

    设计模式之备忘录模式(Memento Pattern)

    备忘录模式(Memento Pattern)是软件设计模式中的一种行为模式,它的主要目的是在不破坏对象封装性的前提下,允许对象在特定时刻保存其内部状态,并能够在之后恢复到保存时的状态。这种模式广泛应用于撤销/重做功能...

    C#备忘录模式 代码例子

    备忘录模式是一种设计模式,它在不破坏封装性的前提下,保存对象的内部状态,以便在需要的时候恢复。在C#中,备忘录模式常用于实现撤销/重做功能,或者在需要记录和恢复对象状态的情况下。下面将详细解释备忘录模式...

    备忘录模式实现及案例

    备忘录模式是一种设计模式,属于行为模式类型,它的主要作用是保存对象的状态,以便在需要的时候能够恢复到之前的状态。这种模式的核心在于提供一种方式,可以在不破坏封装的前提下,捕获并存储一个对象的内部状态,...

    C#面向对象设计模式纵横谈(21):(行为型模式) Memento 备忘录模式

    备忘录模式(Memento Pattern)是一种行为设计模式,它允许在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将对象恢复到先前的状态。这种模式在需要撤销/重做功能、...

    设计模式之备忘录模式的Java版本实现

    备忘录模式是一种在软件设计中广泛使用的结构型设计模式,它的主要目的是为了保存对象的状态,以便在需要的时候能够恢复到之前的状态。备忘录模式的核心思想是通过创建一个备忘录对象来存储原对象的状态,这个备忘录...

    设计模式 - 备忘录模式(C++实例)

    备忘录模式是一种在不破坏封装性的前提下,捕获一个对象的状态,并允许在未来的某个时刻恢复这个状态的设计模式。这种模式在很多场景下都非常有用,例如在游戏中保存进度、在编辑器中撤销/重做操作等。备忘录模式的...

    备忘录模式 C++ 实现

    备忘录模式是一种行为设计模式,它允许在不破坏封装性的前提下,捕获和恢复一个对象的内部状态。在C++中实现备忘录模式,可以有效地帮助开发者在程序运行过程中保存对象的状态,以便在需要时恢复到之前的状态,这...

    备忘录模式笔记1

    备忘录模式笔记 备忘录模式(Memento)是一种非常有用的设计模式,它主要用于保存一个对象的某个状态,以便在适当的时候恢复对象。下面我们将对备忘录模式进行详细的解释和分析。 备忘录模式的定义 备忘录模式是...

    备忘录模式代码示例

    备忘录模式是一种设计模式,它允许对象在不破坏封装性的前提下,捕获和存储其内部状态,以便在需要时能恢复到该状态。这种模式在需要保存和恢复对象状态,而又不想对外部世界暴露其内部实现细节时非常有用。备忘录...

    备忘录模式-极客学院-java-课件代码

    备忘录模式是一种行为设计模式,它允许在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将对象恢复到原先保存的状态。这种模式常用于需要撤销/重做操作的场景,或者在...

    备忘录模式t31

    备忘录模式是一种设计模式,属于行为模式类型,它的主要目的是在不破坏对象封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后恢复对象到先前的状态。这种模式通常用于实现撤销/重做...

    14备忘录模式1

    备忘录模式是一种设计模式,它允许我们保存和恢复对象的内部状态,而无需暴露对象的实现细节。这种模式在需要记录和恢复对象状态的情况下非常有用,比如在游戏中保存进度、在文档编辑器中撤销操作或者在复杂计算过程...

    iOS 设计模式 备忘录模式

    备忘录模式是设计模式中的一种,它主要用于保存对象的状态,以便在未来恢复到该状态。这个模式尤其适用于需要撤销/重做功能的场景。 备忘录模式的核心思想是创建一个备忘录对象,该对象存储另一个对象的内部状态,...

Global site tag (gtag.js) - Google Analytics