java设计模式----状态模式

风流意气都作罢 提交于 2019-11-27 23:50:06

 状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模式。状态模式允许一个对象在其内部状态改变的时候改变其行为。

策略模式和状态模式有点相似,区别就是状态模式是行为改变状态,主要在于状态改变行为的应用场景,而策略模式则是采用哪种算法,让Context去实现哪种算法,决定权在于客户端。状态模式的行为是平行的,不可相互替换的;而策略模式的行为是平等性的,是可以相互替换的

主要有三个角色:

环境角色(Context):保留客户端所需要的一些接口,并保留一个具体状态类的实例。

package design.state;

public class Context {
	private State state;

	public void setState(State state) {
		this.state = state;
	}
	//定义客户端调用接口
	public void request(String para){
		state.handle(para);
	}
}

  

抽象状态角色(State):作为一个接口,封装环境对象的一个特定的状态所对应的行为。

package design.state;

public interface State {
	public void handle(String para);

}

  

具体状态角色(ConcreteState):实现具体的接口定义行为。

package design.state;

public class ConcreteStateA implements State{

	@Override
	public void handle(String para) {
		System.out.println("ConcreteStateA handle:"+para);
	}

}

  

package design.state;

public class ConcreteStateB implements State{

	@Override
	public void handle(String para) {
		System.out.println("ConcreteStateB handle:"+para);
	}

}

测试

package design.state;

public class Client {
	public static void main(String[] args) {
		//创建状态
		State state=new ConcreteStateA();
		State state1=new ConcreteStateB();
		//创建环境
		Context context=new Context();
		 //设置状态
		context.setState(state);
		//请求
		context.request("test");
		//设置状态
		context.setState(state1);
		//请求
		context.request("test");
	}

}

  

结果

ConcreteStateA handle:test
ConcreteStateB handle:test

  

 

转载于:https://www.cnblogs.com/JAYIT/p/5219589.html

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!