定義:
狀態模式
(state pattern)
,允許乙個物件在其內部狀態改變時改變它的行為。物件看起來似乎修改了它的類。
型別:物件行為型模式
概述:
乙個物件有乙個狀態,那麼每乙個狀態又對應一些相應的行為。如果這個物件有很多狀態,那麼就要對應非常多的行為。那麼對這些狀態的判斷以及根據狀態完成相應的行為,會非常複雜。並且如果想新增一種新的狀態時,需要修改很多的現有**。這也是有違開閉原則的。狀態模式正是在這樣一種情況下提出來的。
狀態模式將每種狀態對應的行為抽象出來成為單獨的新的物件,這樣將狀態轉換顯式化了。狀態的變換不再依賴於
context
內部的行為了。另外,將狀態及行為提出來能夠大為降低
context
物件的複雜度。另外如果乙個
state
對應多個
context
時,state
還可以被多個
context
物件共享。
狀態,我們立馬會提出,今天狀態不好,做什麼都沒勁;又或者是今天狀態很好,做事得勁,飯也吃得多。那麼我們就以乙個人不同時刻的狀態為例來講解狀態模式。
類圖:
參與者:
human,也即context通過抽象介面來呼叫狀態物件的具體實現。
state,封裝了與human相關行為的介面。
示例**:
[csharp]view plain
copy
?using system;
using system.collections.generic;
using system.text;
namespace pattern21
// 高興時的狀態
public
public
override
void walk()
public
void attach(human _human)
private human human;
} // 傷心時的狀態
public
class sad : state
public
override
void walk()
public
void attach(human _human)
private human human;
} // 乙個人
public
class human
public
void eat()
public
void walk()
public
void show()
} class program
} }
適用性:
乙個物件的行為取決於它的狀態,並且它必須在執行時刻根據狀態改變它的行為。
乙個操作中含有龐大的多分支的條件語句,且這些分支依賴於該物件的狀態。
優缺點:
優點,將狀態判斷的邏輯移到類外面,方便通過新增新類來新增新的狀態。
缺點,如果狀態非常多,會導致有非常多的狀態類,加大開銷。
設計模式 13 行為型模式之 模板模式
模板,就是方案的固定格式,一般都要遵循這麼個步驟去幹。比如你請假,你需要 填寫請假條,領導1簽字 領導2簽字,這麼三個步驟。這個就叫模板,就是這麼乙個固定的流程。具體你請假條寫的啥,這個不關心。在模板模式 template pattern 中,乙個抽象類公開定義了執行它的方法的方式 模板。它的子類可...
設計模式 四 行為型模式
1 命令模式 是一種資料驅動的設計模式,屬於行為型模式。請求以命令的形式包裹在物件中,並傳給呼叫物件。呼叫物件尋找可以處理該明林的適合的物件,並把該命令傳給相應的物件,該物件執行命令。建立乙個命令介面 public inte ce order建立乙個請求類 public class stock pu...
設計模式 行為型模式 狀態模式
當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。角色說明 繼續以舉追妹紙為例,單身狗狀態下與戀愛狀態下的行為是不一致的。定義公共介面,比如定義乙個人的行為有看電影和逛街 public inte ce personstate實現抽象狀態類的介面,比如人有單身狗和戀愛這兩種狀態 ...