設計模式之狀態模式

2021-09-12 14:21:02 字數 1181 閱讀 5199

狀態模式:當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。(當為紅燈時停止通行綠燈時通行,狀態改變行為發生改變)。

狀態模式主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況。把狀態的邏輯轉移到表示不同狀態的一系列類中,可以把複雜的判斷邏輯簡化。(類似於把if的每個分支寫成類進行判斷,消除龐大的分支條件,通過把狀態轉移到子類之間判斷,減少依賴),很簡單的判斷是完全沒有必要的。

當乙個物件的行為取決於它的狀態,並且它必須在執行時刻根據狀態改變它的行為時,就可以考慮使用狀態模式。

下面是乙個紅綠燈提示的例子

紅綠燈的狀態行為你完全可以用if寫出來,他將類似於

if(是紅燈)else if(是黃燈)else

下面是用狀態模式修改的

//抽象狀態

public abstract class state

//紅燈狀態

public class redlight extends state

}//黃燈行為

public class yellowlight extends state

}//綠燈行為

public class greenlight extends state

}//控制類

public class context

//設定下一狀態的行為方式

public void request()

public state getstate()

public void setstate(state state)

public void syso()

}//測試類

public class test

}輸出***************

當前狀態:a10.redlight

紅燈行人止步

a10.yellowlight@28d93b30

當前狀態:a10.yellowlight

黃燈請等待

a10.greenlight@1b6d3586

當前狀態:a10.greenlight

綠燈可以通行

//如果想這麼簡單的判斷就沒必要用狀態模式,但是複雜的根據狀態不同出現不同行為就可以用狀態模式,

//這樣便於維護擴充套件,減少耦合度。乙個方法如果太長其實極有可能有壞的味道。

設計模式之狀態模式

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

設計模式之 狀態模式

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

設計模式之狀態模式

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