读书人

java state形式

发布时间: 2012-12-25 16:18:28 作者: rapoo

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

读书人网 >编程

热点推荐