2012-02-17 17 views
0

をremovことができれば、我々はまだ、使用:、「他にあれば」それは状態を判断する

簡単なプログラム:「他にあれば」

public class Gamer { 
    private final int NORMAL_STATE = 0; //正常状态 
    private final int MALUM_STATE =1; //生病状态 
    private final int EXCITED_STATE =2; //兴奋状态 
    private int state = 0; 
    public void setState(int state){ 
     this.state = state; 
    } 
    public void run() { 
     if(state == NORMAL_STATE) {  //正常状态下跑 
      System.out.println("100米,跑完共用时15秒!"); 
     } else if(state == MALUM_STATE) { //生病状态下跑 
      System.out.println("100米,跑完共用时20秒!"); 
     } else if(state == EXCITED_STATE) {//兴奋状态下跑 
      System.out.println("100米,跑完共用时10秒!"); 
     } else {    System.out.println("未知的状态"); 
     } 
    } 
} 
we use "if else" to judge state. then we use State design pattern to modify code. 

public interface IState { 
    /** 
    * 起跑 
    */ 
    public void doRun(); 
} 
public class ExcitedState implements IState { 
    public void doRun() { 
     System.out.println("100米,跑完共用时10钞!"); 
    } 
} 

public class MalumState implements IState { 

    public void doRun() { 
     System.out.println("100米,跑完共用时20秒!"); 
    } 
} 
public class NormalState implements IState { 

    public void doRun() { 
     System.out.println("100米,跑完共用时15秒!"); 
    } 
} 
public class Gamer { 
    //当前状态 
    private IState state = new NormalState(); 
    //改变状态的方法 
    public void setState(IState state){ 
     this.state = state; 
    } 
    //状态行为方法,同上面的Gamer 类相比这里没有if..else if判断 
    public void run() { 
     state.doRun(); 
    } 
} 
public class StateTest { 
    public static void main(String[] args) { 
     //没有使用状态设计模式 
     com.bill99.pattern.Gamer game = new com.bill99.pattern.Gamer(); 
     game.setState(0); 
     game.run(); 
     game.setState(1); 
     game.run(); 
     game.setState(2); 
     game.run(); 
     System.out.println("---------------------"); 
     //使用状态设计模式 
     //正常状态下跑  
     Gamer gamer = new Gamer(); 
     gamer.run(); 
     //生病状态下跑 
      int condtion=0 
      if(condtion==0) 
{ 
     gamer.setState(new MalumState()); 
     gamer.run(); 
} 
     //兴奋状态下跑 
      else if(condition==1) 
{ 
     gamer.setState(new ExcitedState()); 
     gamer.run(); 
} 
    } 

我々はまだ条件TUが状態を取得し判断する必要があるので、私はドン「状態パターン」を考えていませんが を削除することができます}これは、ここで

答えて

1

をコードを入力するだけです状態パターンの一部wikipediaを参照してください。 この状態パターンを実装すると、switch文またはelsif文が消えます。

新しい州への移行は、州またはイベントに基づいて行う必要があります(州によって可能な限り処理されるべきです)。

関連する問題