状态模式,就是定义一个状态类,在这个状态类中有一个状态属性,来标明当前所处的状态;还有不同状态下要执行的方法。这些状态要暴露给外界,如外界通过不同的状态来执行不同的操作。就比如QQ的在线,忙碌,隐身等各种状态的实现。
package mode.state;
/**
*
* 定义状态类
*
* */
public 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");
}
}
package mode.state;
/**
*
* 定义上下文对象,拥有state属性,根据不同的state method方法会有不同的执行结果
*
* */
public class Context {
private State state;
public Context(State state) {
super();
this.setState(state);
}
public State getState() {
return state;
}
public void setState(State state) {
this.state = state;
}
public void method() {
if (state.getValue().equals("state1")) {
state.method1();
} else if (state.getValue().equals("state2")) {
state.method2();
}
}
}
测试
package mode.state;
public class Test {
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();
}
}