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、不同的行为;? 间反复进行切换,则应优先考虑状态模式。?