`
samsongbest
  • 浏览: 170292 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

18 行为模式 - 备忘录(Memento)模式

 
阅读更多

需要跟进多重检查点。

 

1.用意

又叫快照模式或Token模式。

备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。在不破坏封装的条件下,将一个对象的状态捕捉住,并外部化,存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态。备忘录模式常常与命令模式和迭代子模式一同使用。

 

2.类图

 

白箱实现

 

黑箱实现



 

 

3.代码

 

白箱实现

/*
 * 备忘录角色
 */
public class Memento {
	private String state;
	public Memento(String state) {
		this.state = state;
	}
	public String getState(){
		return state;
	}
	public void setState(String state) {
		this.state = state;
	}
}


/*
 * 负责人角色
 */
public class Caretaker {
	private Memento memento;

	public Memento retrieveMemento() {
		return memento;
	}

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


/*
 * 发起人角色
 */
public class Originator {
	private String state;

	public Memento createMemento() {
		return new Memento(state);
	}

	/*
	 * 将发起人恢复到备忘录对象所记载的状态
	 */
	public void restoreMemento(Memento memento) {
		this.state = memento.getState();
		S.s("Current state = " + this.state);
	}

	public String getState() {
		return this.state;
	}

	public void setState(String state) {
		this.state = state;
		S.s("Current state = " + this.state);
	}
}


/*
 * 测试类
 */
public class Test {

	private static Originator o = new Originator();
	private static Caretaker c = new Caretaker();
	
	public static void main(String[] args) {		
		o.setState("On");
		c.saveMemento(o.createMemento());
		o.setState("Off");
		o.restoreMemento(c.retrieveMemento());
	}
}
  黑箱实现
/*
 * 标识接口
 */
public interface MementoIF {
}


/*
 * 负责人角色
 */
public class Caretaker {
	private MementoIF memento;

	public MementoIF retrieveMemento() {
		return this.memento;
	}

	public void saveMemento(MementoIF memento) {
		this.memento = memento;
	}
}


/*
 * 发起人角色
 */
public class Originator {
	private String state;

	public Originator() {
	}
	
	public MementoIF createMemento() {
		return new Memento(this.state);
	}

	/*
	 * 将发起人恢复到备忘录对象所记载的状态
	 */
	public void restoreMemento(MementoIF memento) {
		Memento aMemento = (Memento)memento;
		this.setState(aMemento.getState());
		S.s("Current state = " + this.state);
	}

	public String getState() {
		return this.state;
	}

	public void setState(String state) {
		this.state = state;
		S.s("Current state = " + this.state);
	}
	
	/*
	 * 备忘录角色
	 */
	protected class Memento implements MementoIF{
		private String savedState;
		public Memento(String someState) {
			this.savedState = someState;
		}
		public String getState(){
			return savedState;
		}
		public void setState(String someState) {
			this.savedState = someState;
		}
	}
	
}


/*
 * 测试类
 */
public class Test {

	private static Originator o = new Originator();
	private static Caretaker c = new Caretaker();
	
	public static void main(String[] args) {		
		o.setState("On");
		c.saveMemento(o.createMemento());
		o.setState("Off");
		o.restoreMemento(c.retrieveMemento());
	}
}
 

 

z

  • 大小: 70.2 KB
  • 大小: 69.9 KB
  • 大小: 82.5 KB
分享到:
评论

相关推荐

    c++设计模式-行为型模式-备忘录模式

    c++设计模式-行为型模式-备忘录模式;qt工程;c++简单源码;备忘录(Memento)模式的定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先...

    Java设计模式-备忘录

    备忘录模式是一种行为设计模式,它允许对象在不破坏封装性的前提下捕获并存储其内部状态,以便稍后恢复到该状态。这种模式常用于在游戏中保存进度、撤销/重做操作、以及在复杂业务逻辑中保存中间计算结果等场景。 ...

    java常用设计模式-备忘录模式

    备忘录模式(Memento Pattern)是一种行为设计模式,它允许在不破坏封装性的情况下捕获和恢复对象的内部状态。该模式通常用于需要撤销操作或恢复先前状态的情况下。备忘录模式包括三个主要组件:原始对象、备忘录...

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

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

    设计模式之备忘录(memento)

    备忘录(Memento)模式是一种行为设计模式,它在不破坏封装性的前提下,捕获一个对象的内部状态,并允许该对象在以后恢复到这个状态。这种模式常用于需要保存和恢复对象状态的情景,例如撤销/重做功能、游戏存档或...

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

    备忘录模式(Memento Pattern)是设计模式中的一种行为模式,主要目的是在不违反封装原则的情况下,保存一个对象的内部状态,以便在需要时能够恢复到先前的状态。这种模式通常用于实现撤销/重做功能或者在游戏中保存...

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

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

    设计模式专题之(十九)备忘录模式---设计模式备忘录模式示例代码(python--c++)

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

    设计模式之备忘录模式

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

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

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

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

    在"备忘录模式-极客学院-java-课件代码"这个压缩包中,我们可以期待找到相关的Java代码示例,这些示例可能包括发起人、备忘录和管理者类的实现,以及如何在实际场景中运用备忘录模式的示例。通过学习这些代码,...

    [行为型模式] 备忘录模式的理解

    备忘录模式是一种行为设计模式,它允许在不破坏封装性的前提下,捕获和恢复对象的状态。这种模式常用于需要记录对象当前状态以便稍后恢复的情况,例如撤销/重做功能、游戏存档或者复杂表单的数据保存。 在备忘录...

    C++设计模式课件19_Memento_备忘录.pdf

    备忘录模式(Memento Pattern)是一种行为设计模式,它允许在不暴露对象实现细节的情况下保存和恢复对象之前的状态。在C++中实现备忘录模式通常涉及以下几个角色: 1. 发起人(Originator):创建一个备忘录,用以...

    设计模式_行为型_备忘录模式.md

    备忘录模式(Memento)是一种行为型设计模式,它允许在不暴露对象的实现细节的情况下,捕获并保存对象的内部状态,从而可以在未来某个时刻恢复到之前的状态。备忘录模式特别适用于实现撤销操作,或是需要进行状态...

    备忘录模式 C++ 实现

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

    备忘录模式实现及案例

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

    C#备忘录模式 代码例子

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

Global site tag (gtag.js) - Google Analytics