用途
狀态模式 (State)
當一個對象的内在狀态改變時允許改變其行為,這個對象看起來像是改變了其類。
狀态模式是一種行為型模式。
結構
圖-狀态模式結構圖
State : 定義一個接口以封裝與 Context 的一個特定狀态相關的行為。
abstract class State {
public abstract void Handle(Context context);
}
ConcreteState : 每一個子類實作一個與 Context 的一個狀态相關的行為。
class ConcreteStateA extends State {
@Override
public void Handle(Context context) {
context.SetState(new ConcreteStateB());
}
class ConcreteStateB extends State {
context.SetState(new ConcreteStateA());
Context : 維護一個 ConcreteState 子類的執行個體,這個執行個體定義目前的狀态。
class Context {
private State state;
public Context(State state) {
this.state = state;
public void SetState(State state) {
System.out.println("目前狀态:" + state.getClass().getName());
public State GetState() {
return state;
public void Request() {
state.Handle(this);
測試代碼
public class StatePattern {
public static void main(String[] args) {
Context c = new Context(new ConcreteStateA());
c.Request();
運作結果
目前狀态:ConcreteStateB
目前狀态:ConcreteStateA
推薦
本文屬于
JAVA設計模式系列。
參考資料
《大話設計模式》
《HeadFirst設計模式》