`
samsongbest
  • 浏览: 162367 次
  • 性别: 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设计模式--备忘录模式.docx

    备忘录(Memento)模式又叫作快照(Snapshot)模式或Token模式,是一种对象的行为模式。在备忘录模式里,一个备忘录是一个对象,它存储另一个对象(备忘录的原发器)在某个瞬间的内部状态。备忘的目的就是为了以后在需要...

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

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

    (行为型模式) Memento 备忘录模式

    C#面向对象设计模式 (行为型模式) Memento 备忘录模式 视频讲座下载

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

    备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。 备忘录模式java demo

    备忘录模式

    备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。

    设计模式--C++

    5.6 MEMENTO(备忘录)—对象行为型模式 188 5.7 OBSERVER(观察者)—对象行为型模式 194 5.8 STATE(状态)—对象行为型模式 201 5.9 STRATEGY(策略)—对象行为型模式 208 5.10 TEMPLATE METHOD(模板方法)—类...

    设计模式--可复用面向对象软件的基础

    5.6 MEMENTO(备忘录)——对象行为型模式 5.7 OBSERVER(观察者)——对象行为型模式 5.8 STATE(状态)——对象行为型模式 5.9 STRATEGY(策略)——对象行为型模式 5.10 TEMPLATE METHOD(模板方法)——类行为型...

    设计模式——备忘录模式的学习与理解

    备忘录模式( Memento Pattern)在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。备忘录模式属于行为型模式。 通俗的讲,备忘录故名思意...

    design-pattern-java.pdf

    协调多个对象之间的交互——中介者模式(三) 协调多个对象之间的交互——中介者模式(四) 协调多个对象之间的交互——中介者模式(五) 备忘录模式-Memento Pattern 撤销功能的实现——备忘录模式(一) 撤销功能...

    C#设计模式_设计模式_C#_

    创建型: 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3.... 备忘录模式(Memento Pattern) 21. 策略模式(Strategy Pattern) 22. 访问者模式(Visitor Pattern) 23. 状态模式(State Pattern)

    01-制造工具的工厂模式(1).html

    在书中,作者们将这二十三种设计...备忘录模式( Memento ) 状态模式( State ) 访问者模式( Visitor ) 中介者模式( Mediator ) 解释器模式( Interpreter ) 书中通过一幅图,剖析了这二十三种设计模式的关系。

    23种设计模式 - 各种模式的学习

    23种设计模式 目录 创建型 1. Factory Method(工厂方法) 2. Abstract Factory(抽象工厂) ...19. Memento(备忘录) 20. Observer(观察者) 21. State(状态) 22. Strategy(策略) 23. Visitor(访问者)

    09-通过容器实现的外观模式(2).html

    在书中,作者们将这二十三种设计...备忘录模式( Memento ) 状态模式( State ) 访问者模式( Visitor ) 中介者模式( Mediator ) 解释器模式( Interpreter ) 书中通过一幅图,剖析了这二十三种设计模式的关系。

    C#面向对象设计模式纵横谈(视频与源码)

    C#面向对象设计模式纵横谈(21):(行为型模式) Memento 备忘录模式 C#面向对象设计模式纵横谈(22):(行为型模式) State 状态模式 C#面向对象设计模式纵横谈(23):(行为型模式) Strategy 策略模式 C#面向对象设计...

    00-初探 Laravel 和其中的设计模式(3).html

    在书中,作者们将这二十三种设计...备忘录模式( Memento ) 状态模式( State ) 访问者模式( Visitor ) 中介者模式( Mediator ) 解释器模式( Interpreter ) 书中通过一幅图,剖析了这二十三种设计模式的关系。

    12-附录 1 设计模式的七大原则(1).html

    在书中,作者们将这二十三种设计...备忘录模式( Memento ) 状态模式( State ) 访问者模式( Visitor ) 中介者模式( Mediator ) 解释器模式( Interpreter ) 书中通过一幅图,剖析了这二十三种设计模式的关系。

    23种设计模式 (创建型,结构型,行为型)

    创建型: 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) ... 备忘录模式(Memento Pattern) 21. 策略模式(Strategy Pattern) 22. 访问者模式(Visitor Pattern) 23. 状态模式(State Pattern)

    设计模式可复用面向对象软件的基础.zip

    5.6 MEMENTO(备忘录)—对象行为型 模式 188 5.7 OBSERVER(观察者)—对象行为型 模式 194 5.8 STATE(状态)—对象行为型模式 201 5.9 STRATEGY(策略)—对象行为型 模式 208 5.10 TEMPLATE METHOD(模板方法) ...

Global site tag (gtag.js) - Google Analytics