码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-07-21 21:55:44      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:

//备忘录模式定义:
//在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
//这样以后就能够将该对象恢复到原先保存的状态
//实例:測试两种方案。两种方案在第一阶段的过程是同样的,第二阶段是不同的
//实例代码
//备忘录对象的窄接口
public interface FlowAMockMemento {
	//空的,所谓窄接口,即仅仅是一个标识作用,它的持有者不能够调用不论什么它的方法
}
//測试流程类
public class FlowAMock {
	private String flowName;
	private int tempResult;
	private String tempState;
	public FlowAMock(String flowName) {
		this.flowName = flowName;
	}
	public void runPhaseOne() {
		tempResult = 3;
		tempState = "PhaseOne";
	}
	public void shema1() {
		this.tempState += ",Schema1";
		System.out.pritnln(this.tempState+":now run"+tempResult);
		this.tempResult += 11;
	}
	public void schema2() {
		this.tempState += ",Schema2";
		System.out.pritnln(this.tempState+":now run"+tempResult);
		this.tempResult += 22;
	}
	public FlowAMockMemento createMemento() {
		return new MementoImpl(this.tempResult, this.tempState);
	}
	public void setMemento(FlowAMockMemento memento) {
		MementoImpl mementoImpl = (MementoImpl)memento;
		this.tempResult = mementoImpl.getTempResult();
		this.tempState = mementoImpl.getTempState();
	}
	private static class MemetoImpl implements FlowAMockMemento	{
		private int tempResult;
		private String tempState;
		public MemetoImpl(int tempResult, String tempState) {
			this.tempResult = tempResult;
			this.tempState = tempState;
		}
		public int getTempResult() {
			return tempResult;
		}
		public int getTempState() {
			return tempState;
		}
	}
}
//备忘录管理类
public class FlowAMementoCareTaker {
	private FlowAMockMemento memento = null;
	public void saveMemento(FlowAMockMemento memento) {
		this.memento = memento;
	}
	public FlowAMockMemento retriveMemento() {
		return this.memento;
	}
}
//client
public class Client {
	public static void main(String[] args) {
		FlowAMock mock = new FlowAMock("TestFlow");
		mock.runPhaseOne();
		FlowAMementoCareTaker careTaker = new FlowAMementoCareTaker();
		FlowAMockMemento memento = mock.createMemento();
		careTaker.saveMemento(memento);
		mock.schema1();//执行第一种方案
		mock.setMemento(careTaker.retriveMemento());//恢复数据
		mock.schema2();//执行另外一种发难
	}
}
//备忘录模式本质:保存和恢复内部状态
//长处:更好的封装性。因为使用了内部类和窄接口,所以外部就算持有备忘录接口对象也无法訪问当中的属性
//备忘录模式中内部内和窄接口是最给力的设计,这样给把对象的接口给外部保存
//可是接口中没有方法,所以外部无法访问。充分保证了封装
//只需要创建它的主要技能是其价值和获得足够的

版权声明:本文博客原创文章,博客,未经同意,不得转载。

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

标签:

原文地址:http://www.cnblogs.com/bhlsheji/p/4665627.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!