zoukankan      html  css  js  c++  java
  • 备忘录模式设计模式入门Memento

    //备忘录模式定义:
    //在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
    //这样以后就能够将该对象恢复到原先保存的状态
    //实例:測试两种方案。两种方案在第一阶段的过程是同样的,第二阶段是不同的
    //实例代码
    //备忘录对象的窄接口
    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();//执行另外一种发难
    	}
    }
    //备忘录模式本质:保存和恢复内部状态
    //长处:更好的封装性。因为使用了内部类和窄接口,所以外部就算持有备忘录接口对象也无法訪问当中的属性
    //备忘录模式中内部内和窄接口是最给力的设计,这样给把对象的接口给外部保存
    //可是接口中没有方法,所以外部无法访问。充分保证了封装
    //只需要创建它的主要技能是其价值和获得足够的

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

  • 相关阅读:
    汇编语言(王爽) 实验九
    汇编语言(王爽)实验十
    leetcode longest common prefix(easy) /java
    leetcode container-with-most-water(medium) /java
    jdbc 驱动设置
    天上的星星都洒在我身上(mysql重装失败指南)
    leetcode palindrome number(easy) /java
    异常处理
    递归函数
    序列化模块
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4665627.html
Copyright © 2011-2022 走看看