Java设计模式(十) 备忘录模式 状态模式

(十九)备忘录模式

备忘录模式目的是保存一个对象的某个状态,在适当的时候恢复这个对象。

class Memento{
	private String value;
	public Memento(String value){
		this.value = value;
	}
	public String getValue() {
		return value;
	}
	public void setValue(String value) {
		this.value = value;
	}
}
class Storage{
	private Memento me;
	public Memento getMe() {
		return me;
	}
	public void setMe(Memento me) {
		this.me = me;
	}
	public Storage(Memento me){
		this.me = me;
	}
}
class Original{
	private String value;
	public String getValue() {
		return value;
	}
	public void setValue(String value) {
		this.value = value;
	}
	public Original(String value){
		this.value = value;
	}
	public Memento creatMemento(){
		return new Memento(value);
	}
	public void restoreMemento(Memento me){
		this.value = me.getValue();
	}
}
public class MementoTest {
	public static void main(String[] args){
		//创建原始类
		Original or = new Original("apple");
		//创建备忘录
		Storage st = new Storage(or.creatMemento());
		// 修改原始类的状态
        System.out.println("初始化状态为:" + or.getValue());
        or.setValue("niu");
        System.out.println("修改后的状态为:" + or.getValue());
        // 回复原始类的状态
        or.restoreMemento(st.getMe());
        System.out.println("恢复后的状态为:" + or.getValue());
	}
}

其实就是做个副本存一下,然后某个时间取出来。

(二十)状态模式

状态模式的意义是将表示对象状态的逻辑分散到代表状态的不同类中。为了处理状态间的迁移,可以让主对象包含一组状态的引用。或者在状态迁移的调用中,将主对象传递给状态改变的类。也可以让状态类的信息提供者仅仅给出下一个状态,而不更新主对象。无论如何管理状态迁移,状态模式都会通过将对象的不同状态操作,分散到一组类集合中,从而简化代码。

class State{
	private String value;
	public String getValue() {
		return value;
	}
	public void setValue(String value) {
		this.value = value;
	}
	public void method1(){
		System.out.println("method1");
	}
	public void method2(){
		System.out.println("method2");
	}
}
class Context{
	private State state;
	public State getState() {
		return state;
	}
	public void setState(State state) {
		this.state = state;
	}
	public Context(State state){
		this.state = state;
	}
	public void method(){
		if(state.getValue().equals("state1")){
			state.method1();
		}else if(state.getValue().equals("state2")){
			state.method2();
		}
	}
}
public class StateTest {
	public static void main(String[] args){
		State state = new State();
		Context context = new Context(state);
		state.setValue("state1");
		context.method();
		state.setValue("state2");
		context.method();
	}
}

Java设计模式(十) 备忘录模式 状态模式,布布扣,bubuko.com

时间: 2024-08-02 02:45:09

Java设计模式(十) 备忘录模式 状态模式的相关文章

JAVA设计模式十二--State(状态模式)

状态模式(State Pattern)是设计模式的一种,属于行为模式. 定义(源于Design Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类. 状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况.把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化.意图:允许一个对象在其内部状态改变时改变它的行为适用场景: 1.一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为. 2.一个操作中含有庞大的多分支结

Java设计模式菜鸟系列(十三)状态模式建模与实现

转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39829859 状态模式(State):允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类.状态模式说白了就是一个对像有不同的状态,不同的状态对应不同的行为,它其实是对switch case这样的语句的拓展. 一.uml建模: 二.代码实现 /** * 示例:状态模式-- 一个对像有不同的状 态,不同的状态对应不同的行为 * * 下面四则运算为例 */ interface S

JAVA设计模式十--strategy(策略者模式)

概念策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它的客户而独立变化.(原文:The Strategy Pattern defines a family of algorithms,encapsulates each one,and makesthem interchangeable. Strategy lets the algorithm vary independently from clients that use it.)Conte

折腾Java设计模式之备忘录模式

原文地址:折腾Java设计模式之备忘录模式 备忘录模式 Without violating encapsulation, capture and externalize an object's internal state allowing the object to be restored to this state later. 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态. 所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个

Java设计模式(六)合成模式 享元模式

(十一)合成模式 Composite 合成模式是一组对象的组合,这些对象可以是容器对象,也可以是单对象.组对象允许包含单对象,也可以包含其他组对象,要为组合对象和单对象定义共同的行为.合成模式的意义是 保证客户端调用单对象与组合对象的一致性. class TreeNode{ private String name; private TreeNode parent; private Vector<TreeNode> children = new Vector<TreeNode>();

Java设计模式(五)外观模式 桥梁模式

(九)外观模式 外观模式为子系统提供一个接口,便于使用.解决了类与类之间关系的,外观模式将类之间的关系放在一个 Facade 类中,降低了类类之间的耦合度,该模式不涉及接口. class CPU { public void startup(){ System.out.println("cpu start"); } public void shutdown(){ System.out.println("cpu stop"); } } class Memory { pu

java设计模式--观察者模式和事件监听器模式

文章转载于:http://www.java2000.net/p9452 复习设计模式,看到observer观察者模式,说法是该模式和iterator迭代器模式类似已经被整合进jdk,但是jdk提供了两种接口: 一.java.util.Observer -- 观察者接口 对应: java.util.Observable --受查者根类 二.java.util.EventListener -- 事件监听/处理接口 对应: java.util.EventObject -- 事件(状态)对象根类 研究了

Java设计模式(七)策略模式 模板模式

(十三)策略模式 策略模式定义了多个封装起来的算法,封装的算法可以相互替换,并且算法的变化不会影响到使用算法的客户.借用另一位大神的例子. interface ICalculator{ public int calculate(String exp); } abstract class AbstractCalculator{ public int[] split(String exp,String opt){ String array[] = exp.split(opt); int arrayI

Java设计模式(三)原型模式

(五)原型模式 Prototype 原型模式目的是复制一个现有对象来生成新的对象,而不是通过实例化的方式.原型模式需要实现 Cloneable 接口,覆写clone方法,复制分为浅复制.深复制. 浅复制:将一个对象复制后,基本数据类型的变量都重新创建,引用类型,指向的还是原对象所指向的. 深复制:讲一个对象复制后,不论基本数据类型和引用类型,都是重新创建,是完全的彻底的复制. public class ProtoType { public static void main(String[] ar