java state形式
java state模式
1.静态主调函数 package com; public class Test { public static void main(String[] args) { State state = new StateA(); StateManager sm = new StateManager(state); for(int i=0;i<4;i++) { state = sm.nextState(); System.out.print(":"+state); if(state == null) { System.out.print("-->"); } sm.nextStep(); } } } 2.State接口类 package com; public interface State { public void lastStep(StateManager s); public void nextStep(StateManager s); } 3.状态管理类 package com; public class StateManager { private State state; public StateManager(State initState) { this.state = initState; } public void setState(State state) { this.state = state; } //下一步 public void nextStep() { if(this.state != null) this.state.nextStep(this); } //上一步 public void lastStep() { if(this.state != null) this.state.lastStep(this); } //返回下一个状态 public State nextState() { return this.state; } } 4.状态类 package com; public class StateA implements State { public void lastStep(StateManager s) { s.setState(new StateC()); } public void nextStep(StateManager s) { s.setState(new StateB()); } public String toString() { return "State A"; } } package com; public class StateB implements State { public void lastStep(StateManager s) { s.setState(new StateA()); } public void nextStep(StateManager s) { s.setState(new StateC()); } public String toString() { return "State B"; } } package com; public class StateC implements State { public void lastStep(StateManager s) { s.setState(new StateB()); } public void nextStep(StateManager s) { s.setState(new StateA()); } public String toString() { return "State C"; } }
4. 总结:
(1) 采用interface实现多继承,加入管理类,方便状态切换
(2)应用场景:
1、不同的状态(可能会对应相应的行为),
2、不同的行为; 间反复进行切换,则应优先考虑状态模式。