State模式:
public class Context {
public static final int STATE_ONE = 0;
public static final int STATE_TWO = 1;
private State currentState = new ConcreteState1();
public void request() {
currentState.handle();
}
public void changeState(int state) {
switch (state) {
case STATE_ONE:
currentState = new ConcreteState1();//关键点 属性(对象)发生改变
break;
case STATE_TWO:
currentState = new ConcreteState2();//关键点
break;
}
}
}
public class ConcreteState2 implements State {
public void handle() {
System.out.println("ConcreteState2.handle() executing");
}
}
public class ConcreteState1 implements State {
public void handle() {
System.out.println("ConcreteState1.handle() executing");
}
}
public interface State {
public void handle();
}
public class Test {
public static void main(String[] args) {
Context ctx = new Context();
ctx.request();
// 改变ctx的状态?为什么改变了呢?大家想想看。
ctx.changeState(Context.STATE_TWO);
// 再次唤起Context.request(),结果大不一样。
ctx.request();
}
}