现在的位置: 首页 > 综合 > 正文

java设计模式—状态模式

2013年04月16日 ⁄ 综合 ⁄ 共 3020字 ⁄ 字号 评论关闭

 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

抱歉!评论已关闭.