状态模式:允许在其内部状态变化的时候改变他的行为。可以理解为对象的行为其实是由他的状态来驱动的。
package com.jerry.design.state;
// 测试类
public class Test {
public static void main(String[] args) {
State state = new StateA();
StateManager controller = new StateManager(state);
for (int i = 0; i < 10; i++) {
state = controller.nextState();
System.out.print(state);
if(state == null) break;
System.out.print("->");
controller.nextStep();
}
}
}
interface State {
public void lastState(StateManager c);
public void nextState(StateManager c);
}
class StateA implements State {
public void lastState(StateManager c) {
c.setState(new StateC());
}
public void nextState(StateManager c) {
c.setState(new StateB());
}
@Override
public String toString() {
return "i am StateA!";
}
}
class StateB implements State {
public void lastState(StateManager c) {
c.setState(new StateA());
}
public void nextState(StateManager c) {
c.setState(new StateC());
}
@Override
public String toString() {
return "i am StateB!";
}
}
class StateC implements State {
public void lastState(StateManager c) {
c.setState(new StateB());
}
public void nextState(StateManager c) {
c.setState(new StateA());
}
@Override
public String toString() {
return "i am StateC!";
}
}
class StateManager {
private State state;
private StateManager(){}
public StateManager(State initState){
this.state = initState;
}
public void setState(State state) {
this.state = state;
}
public void nextStep(){
if(this.state != null)
this.state.nextState(this);
}
public void lastStep(){
if(this.state != null)
this.state.lastState(this);
}
public State nextState(){
return this.state;
}
}
这个例子的难点其实是这个状态管理器,其中用一个State对象维护了当前状态和下一个状态,通过设置这个state对象的不同状态来获得不同的state的方法调用。