java-设计模式(行为型)-【备忘录模式】

http://alaric.iteye.com/blog/1931253

http://www.cnblogs.com/java-my-life/archive/2012/06/06/2534942.html

1.备忘录模式(Memento)

定义:主要目的是保存一个对象的某个状态,以便在适当的时候恢复对象,个人觉得叫备份模式更形象些。

通俗的讲下:假设有原始类A,A中有各种属性,A可以决定需要备份的属性,备忘录类B是用来存储

A的一些内部状态,类C呢,就是一个用来存储备忘录的,且只能存储,不能修改等操作

关系图:

2.举例

2.1 Original类:原始类:

//原始类
public class Original {

	//状态信息
	private String state="";

	//备忘录:保存状态信息
	public Memento createMemento()
	{
		return new Memento(state);
	}

	public String getState() {
		return state;
	}
    //重置状态信息:从备忘录中重置
	public void resetState(Memento memento)
	{
		System.out.print("重置-");
		setState(memento.getState());
	}
	public void setState(String state) {
		this.state = state;
		System.out.println("设置-状态:"+state);
	}
}
//备忘录:不可修改状态信息
class Memento
{
	private String state=null;
	public String getState()
	{
		return state;
	}
	public Memento(String state)
	{
		this.state=state;
	}
}

  2.2 存储类:

//保存备忘录的存储类
public class Storage {

	private Memento memento=null;
	public Storage(Memento memento)
	{
		this.memento=memento;
	}
	public Memento getMemento()
	{
		return memento;
	}
}

  2.3 测试:

public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
        Original ori=new Original();
        ori.setState("off");
        //保存备忘录
        Storage  sto=new Storage(ori.createMemento());
        //改变状态
        ori.setState("on");
        //重置状态
        ori.resetState(sto.getMemento());
	}
}

  2.4 运行结果:

设置-状态:off
设置-状态:on
重置-设置-状态:off

3. 黑箱操作(将备忘录以私有化内部类的形式定义,再通过一个接口给外界访问):

//原始类
public class Original {

	//状态信息
	private String state="";

	//备忘录:以内部类的方式保存信息,继承该接口,方便外界访问它
	private class Memento implements MementoIF
	{

		public Memento(Original ori)
		{
			state=ori.state;
		}

		public String getState() {
			// TODO Auto-generated method stub
			return null;
		}
	}
	public Memento createMemento()
	{
		return new Memento(this);
	}

	public String getState() {
		return state;
	}
    //重置状态信息:从备忘录中重置
	public void resetState(MementoIF  memento)
	{
		System.out.print("重置-");
		Memento mem=(Memento)memento ;
		setState(mem.getState());
	}
	public void setState(String state) {
		this.state = state;
		System.out.println("设置-状态:"+state);
	}
}
//创建一个接口:方便外部对备忘录内部类的访问
interface MementoIF
{

}

 测试:

public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
        Original ori=new Original();
        ori.setState("off");
        //保存备忘录
        MementoIF memento=ori.createMemento();
        //改变状态
        ori.setState("on");
        //重置状态
        ori.resetState(memento);
        }
}

 结果:

设置-状态:off
设置-状态:on
重置-设置-状态:off

  

时间: 2025-01-05 13:43:11

java-设计模式(行为型)-【备忘录模式】的相关文章

《java设计模式》之备忘录模式

备忘录模式又叫做快照模式(Snapshot Pattern)或Token模式,是对象的行为模式. 备忘录对象是一个用来存储另外一个对象内部状态的快照的对象.备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态捕捉(Capture)住,并外部化,存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态.备忘录模式常常与命令模式和迭代子模式一同使用. 备忘录模式的结构 备忘录模式的结构图如下所示 备忘录模式所涉及的角色有三个:备忘录(Memento)角色.发起人(Originator)角

[设计模式-行为型]备忘录模式(Memento)

一句话 让某个对象可以取到之前的某个状态值. 概括 解析 MEMENTO-同时跟几个MM聊天时,一定要记清楚刚才跟MM说了些什么话,不然MM发现了会不高兴的哦,幸亏我有个备忘录,刚才与哪个MM说了什么话我都拷贝一份放到备忘录里面保存,这样可以随时察看以前的记录啦. 备忘录模式:备忘录对象是一个用来存储另外一个对象内部状态的快照的对象.备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态捉住,并外部化,存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态. 实例 这个实例就以状态值

java设计模式--行为型模式--迭代模式

1 迭代器模式 2 概述 3 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. 4 5 6 适用性 7 1.访问一个聚合对象的内容而无需暴露它的内部表示. 8 9 2.支持对聚合对象的多种遍历. 10 11 3.为遍历不同的聚合结构提供一个统一的接口(即,支持多态迭代). 12 13 14 参与者 15 1.Iterator 16 迭代器定义访问和遍历元素的接口. 17 18 2.ConcreteIterator 19 具体迭代器实现迭代器接口.

java设计模式--行为型模式--命令模式

1 命令模式 2 概述 3 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可撤消的操作. 4 5 6 适用性 7 1.抽象出待执行的动作以参数化某对象. 8 9 2.在不同的时刻指定.排列和执行请求. 10 11 3.支持取消操作. 12 13 4.支持修改日志,这样当系统崩溃时,这些修改可以被重做一遍. 14 15 5.用构建在原语操作上的高层操作构造一个系统. 16 17 18 参与者 19 1.Command 20 声明执行操作的接口.

java设计模式5--原型模式(Prototype)

本文地址:http://www.cnblogs.com/archimedes/p/java-prototype-pattern.html,转载请注明源地址. 原型模式 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 概述 原型模式是从一个对象出发得到一个和自己有相同状态的新对象的成熟模式,该模式的关键是将一个对象定义为原型,并为其提供复制自己的方法. java.lang.Object类的clone方法 参见<java中的深浅克隆> 适用性 1.当一个系统应该独立于它的产品创建

IOS设计模式之四(备忘录模式,命令模式)

本文原文请见:http://www.raywenderlich.com/46988/ios-design-patterns. 由 @krq_tiger(http://weibo.com/xmuzyq)翻译,如果你发现有什么错误,请与我联系谢谢. 备忘录(Memento)模式 备忘录模式快照对象的内部状态并将其保存到外部.换句话说,它将状态保存到某处,过会你可以不破坏封装的情况下恢复对象的状态,也就是说原来对象中的私有数据仍然是私有的. 如何使用备忘录模式 在ViewController.m中增加

折腾Java设计模式之中介者模式

博文原址:折腾Java设计模式之中介者模式 中介者模式 中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性.这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护.中介者模式属于行为型模式. 通俗点来讲就是提供一个中介平台,说到平台,那其实很容易联系到我们很熟悉的房地产中介.我们可以直接通过这个平台得到我们想要的信息,不用对象自身与其他对象交互. 买房子租房子就不需要去找房东,只需要在中介那里获取相应的×××信息.如下图那样,两方只

图解Java设计模式之职责链模式

图解Java设计模式之职责链模式 学校OA系统的采购审批项目 :需求是 传统方案解决OA系统审批,传统的设计方案 职责链模式基本介绍 职责链模式解决OA系统采购审批 职责链模式在SpringMVC框架应用的源码 职责链模式的注意事项和细节 学校OA系统的采购审批项目 :需求是 采购员采购教学器材1)如果金额 小于等于 5000,由教学主任审批 (0<=x<=5000)2)如果金额 小于等于 10000,由院长审批(5000 < x <= 10000)3)如果金额 小于等于 3000

一起学java设计模式--适配器模式(结构型模式)

适配器模式 现有一个接口DataOperation定义了排序方法sort(int[]) 和查找方法search(int[], int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法,类BinarySearch 的binarySearch(int[], int)方法实现了二分查找算法.现使用适配器模式设计一个系统,在不修改源代码的情况下将类QuickSort和类BinarySearch的方法适配到DataOperation接口中.绘制类图并编程实现. (要求实现

设计模式入门之备忘录模式Memento

//备忘录模式定义: //在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态. //这样以后就可以将该对象恢复到原先保存的状态 //实例:测试两种方案,两种方案在第一阶段的过程是相同的,第二阶段是不同的 //实例代码 //备忘录对象的窄接口 public interface FlowAMockMemento { //空的,所谓窄接口,即只是一个标识作用,它的持有者不可以调用任何它的方法 } //测试流程类 public class FlowAMock { private