設計模式21 行為型模式之狀態模式

2021-09-26 01:27:16 字數 1767 閱讀 4067

定義

狀態模式

(state pattern)

,允許乙個物件在其內部狀態改變時改變它的行為。物件看起來似乎修改了它的類。

型別:物件行為型模式

概述:

乙個物件有乙個狀態,那麼每乙個狀態又對應一些相應的行為。如果這個物件有很多狀態,那麼就要對應非常多的行為。那麼對這些狀態的判斷以及根據狀態完成相應的行為,會非常複雜。並且如果想新增一種新的狀態時,需要修改很多的現有**。這也是有違開閉原則的。狀態模式正是在這樣一種情況下提出來的。

狀態模式將每種狀態對應的行為抽象出來成為單獨的新的物件,這樣將狀態轉換顯式化了。狀態的變換不再依賴於

context

內部的行為了。另外,將狀態及行為提出來能夠大為降低

context

物件的複雜度。另外如果乙個

state

對應多個

context

時,state

還可以被多個

context

物件共享。

狀態,我們立馬會提出,今天狀態不好,做什麼都沒勁;又或者是今天狀態很好,做事得勁,飯也吃得多。那麼我們就以乙個人不同時刻的狀態為例來講解狀態模式。

類圖:

參與者:

human,也即context通過抽象介面來呼叫狀態物件的具體實現。

state,封裝了與human相關行為的介面。

示例**:

[csharp]view plain

copy

print

?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實現抽象狀態類的介面,比如人有單身狗和戀愛這兩種狀態 ...