状态模式(State)
1、概述
①定义
状态模式允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。
②适用场景
- 一个对象的行为取决于它的状态,并且它必须在运行时刻根据状态改变它的行为。
- 一个操作中含有庞大的多分支结构,并且这些分支决定于对象的状态。
③结构
- State类为状态类,用来存储一些状态信息。
- Context类为上下文类,用来存储State。
- React类为反应器,根据Context中state属性的变化而作出相对应的反应。
UML图:
2、实例
代码已经上了注释,很简单,大家领会一下状态模式的思想。
/**
* @author Hanlin Wang
*/
public class StateMode {
public static void main(String[] args) {
Context.setState(new State("state1"));
Context.Handler();
Context.setState(new State("state2"));
Context.Handler();
//运行结果
//State 1 mode is running
//State 2 mode is running
}
}
//定义状态类
class State{
private String value;
public State(String value){
this.value = value;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
//定义上下文类,监视State类的变化
class Context{
//注入State
private static State state;
public static State getState() {
return state;
}
public static void setState(State state) {
Context.state = state;
}
public static void Handler(){
String value = state.getValue();
switch (value) {
case "state1":
React.monitor();
break;
case "state2":
React.monitor2();
break;
default:
System.out.println("unknown");
break;
}
}
}
//定义事件处理类
class React{
public static void monitor(){
System.out.println("State 1 mode is running");
}
public static void monitor2(){
System.out.println("State 2 mode is running");
}
}