您的位置:首页 > 编程语言 > Java开发

java设计模式---状态模式

2013-07-24 09:58 381 查看
Java深入到一定程度,就不可避免的碰到设计模式这一概念,了解设计模式,将使自己对java中的接口或抽象类应用有更深的理解.设计模式在java的中型系统中应用广泛,遵循一定的编程模式,才能使自己的代码便于理解,易于交流,State(状态)模式是比较常用的一个模式.
应用场景:如果需要在 1、不同的状态(可能会对应相应的行为), 2、不同的行为; 间反复进行切换,则应优先考虑状态模式。
在此写了7个java类来描述说明State设计模式;
1、State.java 状态接口
2、StateA.java 状态A
3、StateB.java 状态B
4、StateC.java 状态C
5、StateD.java 状态D
6、StateManager.java 状态管理类
7、StateTest.java 带有main方法的测试类
===============   1、State.java  状态接口
 public interface State {
  //执行'上一步' 操作
  public void lastStep(StateManager c);
  //执行'下一步' 操作
  public void nextStep(StateManager c);
}
===============   1 end
 
===============   2、StateA.java  状态A
 public class StateA implements State {
  //A->C
  public void lastStep(StateManager c) {
    // TODO Auto-generated method stub
    c.setState(new StateC());
  }
  //A->B
  public void nextStep(StateManager c) {
    // TODO Auto-generated method stub
    c.setState(new StateB());
  }
  @Override
  public String toString() {
    // TODO Auto-generated method stub
    return "State A";
  }
}
===============   2 end
 
===============   3、StateB.java  状态B
public class StateB implements State {
  //B->A
  public void lastStep(StateManager c) {
    // TODO Auto-generated method stub
    c.setState(new StateA());
  }
  //B->C
  public void nextStep(StateManager c) {
    // TODO Auto-generated method stub
    c.setState(new StateC());
  }
  @Override
  public String toString() {
    // TODO Auto-generated method stub
    return "State B";
  }
}
===============   3 end
 
===============   4、StateC.java  状态C
public class StateC implements State {
  //C->null(end)
  public void lastStep(StateManager c) {
    // TODO Auto-generated method stub
    c.setState(null);
  }
  //C->D
  public void nextStep(StateManager c) {
    // TODO Auto-generated method stub
    c.setState(new StateD());
  }
  @Override
  public String toString() {
    // TODO Auto-generated method stub
    return "State C";
  }
}
===============   4 end
 
===============   5、StateD.java  状态D
public class StateD implements State {
  //D->B
  public void lastStep(StateManager c) {
    // TODO Auto-generated method stub
    c.setState(new StateB());
  }
  //D->nlll(end)
  public void nextStep(StateManager c) {
    // TODO Auto-generated method stub
    c.setState(null);
  }
  @Override
  public String toString() {
    // TODO Auto-generated method stub
    return "State D";
  }
}
===============   5 end
 
===============   6、StateManager.java 状态管理类
 public 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.nextStep(this);
  }
 
  //上一步
  public void lastStep(){
    if(this.state != null)
      this.state.lastStep(this);
  }
 
  //返回下一个状态
  public State nextState(){
    return this.state;
  }
}
===============   6 end

===============   7、StateTest.java  状态测试类
public class StateTest {
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    //顺行起点A
    State state = new StateA();
    StateManager controller = new StateManager(state);
    for (int i = 0; i < 6; i++) {
      state = controller.nextState();
     
      System.out.print(state);
      if(state == null) break;
      System.out.print("->");
      //顺流
      controller.nextStep();
    }
   
    System.out.println("");
   
    //顺行起点D
    State converseState = new StateD();
    controller = new StateManager(converseState);
    for (int i = 0; i < 6; i++) {
      state = controller.nextState();
     
      System.out.print(state);
      if(state == null) break;
      System.out.print("->");
      //逆流
      controller.lastStep();
    }
  }
}
===============   7 end
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: