設計模式之狀態模式

2021-09-29 05:53:26 字數 1013 閱讀 5894

狀態模式(state)

當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。

主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況。把狀態的判斷邏輯轉移到表示不同狀態的一系列類當中,可以把複雜的判斷邏輯簡化。就是為了消除龐大的條件分支語句。

在子狀態的行為中,需要設定其下一狀態

* 抽象狀態類:依賴context

*/public abstract class state

/**

* context類,理解為實體類,維護乙個state例項

*/public class context

public state getstate()

//更新狀態

public void setstate(state state)

//觸發呼叫

public void request()

}

/**

* 子狀態a,繼承state

*/public class concretestatea extends state

}

/**

* 子狀態b,繼承state

*/public class concretestateb extends state

}

實際使用中,

//初始狀態為a

context context = new context(new concretestatea());

context.request();//此時執行狀態a行為,將把狀態更新為b

context.request();//此時執行的是狀態b行為,同時又把狀態更新為a

設計模式之狀態模式

一 作用 允許乙個物件在其內部狀態改變時改變它的行為,物件看起來似乎修改了它的類。其別名為狀態物件 objects for states 狀態模式是一種物件行為型模式。二 例子 狀態抽象類 abstract class state 具體狀態類,每個狀態對應乙個類 class concretestat...

設計模式之 狀態模式

gof 設計模式 中給狀態模式下的定義為 允許乙個物件在其內部狀態改變時改變它 的行為。這個物件看起來似乎修改了它的類。看起來,狀態模式好像是神通廣大 居然能夠 修改自身的類 能夠讓程式根據不同的外部情況來做出不同的響應,最直接的方法就是在程式中將這些可能發生的外部情況全部考慮到,使用 if els...

設計模式之狀態模式

定義 允許乙個物件在其內部狀態變化時改變它的行為,物件看起來似乎修改了它所屬的類。類圖 說明 context表示環境類,它定義了客戶應用程式感興趣的介面,並維護乙個concretestate子類的例項,這個例項用於定義當前狀態 state表示抽象狀態類,它定義了乙個介面以封裝與context的乙個特...