設計模式----State(狀態)模式
來源:互聯網
上載者:User
設計模式
----State(
狀態
)
模式
GoF
: 允許一個對象在其內部狀態改變時,改變他的行為。對象看起來似乎修改了它的類。 在實際的程式開發中,我們經常會用到大量的if elseif else對某種狀態進行切換,特別是用慣了結構化語言(C語言)的人。如果狀態切換的情況反覆出現,我們就可以考慮到採用State模式來代替程式中大量的if elseif else了。在大多數情況下,如果對象的屬性不同那麼相應得對象的行為要求也不同。對GoF給出的定義做個通俗的解釋就是:一個對象在不同的狀態下有不同的行為,也可以說對象的每個狀態有著不同的行為。 下面給出案例代碼(我的這個案例比較簡單,但是能反映出State模式的意思): 先來一個狀態:
package State;
public abstract class State
... {
/** *//** Creates a new instance of State */
public State() ...{
}
public abstract void opration();
} // end class State
在來兩個具體的State:
package State;
public class ConcreteStateA extends State
... {
/** *//** Creates a new instance of ConcreteStateA */
public ConcreteStateA() ...{
}
public void opration()
...{
System.out.println("The Concrete A");
}//end opration()
public static ConcreteStateA getInstance()
...{
return new ConcreteStateA();
}//end getInstance()
}
package State;
public class ConcreteStateB extends State
... {
/** *//** Creates a new instance of ConcreteStateB */
public ConcreteStateB() ...{
}
public void opration()
...{
System.out.println("The Concrete B");
}//end operation()
public static ConcreteStateB getInstance()
...{
return new ConcreteStateB();
}//end getInstance()
} // end class ConcreteStateB
來一個情境:
package State;
public class Context
... {
private State state;
/** *//** Creates a new instance of Context */
public Context() ...{
}