設計模式--狀態模式State(行為型)
1 定義:
1.1 定義:Allow an object to alter its behavior when its internal state changes. The object will appear to change its class.(當一個物件內在狀態改變時允許其改變行為,這個物件看起來像改變了其類)。
1.2 通用類圖:
一個更易理解的類圖:
角色解說:
State——抽象狀態角色
介面或抽象類,負責物件狀態定義,並且封裝環境角色以實現狀態切換。
ConcreteState——具體狀態角色
每一個具體狀態必須完成兩個職責:本狀態行為管理以及趨向狀態處理,通俗地說,就是本狀態下要做的事情,以及本狀態如何過渡到其他狀態。
Context——環境角色
定義客戶端需要的介面,並且負責具體狀態的切換。
1.3 通用程式碼:
2 優點
2.1 結構清晰:避免了過多的條件判斷,避免了程式的複雜性,提高了系統的可擴充套件性。
2.2 遵循開閉原則和單一職責原則:每個狀態都是一個子類,要增加狀態就要增加子類,修改狀態,就只需修改一個子類就可以了。
2.3 封裝性非常好:狀態變換放置到類的內部來實現,外部的呼叫不用知道類內部如何實現狀態和行為的變換。
3 缺點
子類會太多,即類膨脹。這時可以採用狀態表,然後根據狀態執行相應的操作。
4 應用場景
4.1 行為隨狀態改變而改變的場景:如許可權設計(人員的狀態不同,即使執行相同的行為,結果也不同);
4.2 條件、分支判斷語句的替代者(有待思量)
5 注意事項
狀態模式適用於當某個物件在它的狀態發生改變時,它的行為也隨著發生比較大的變化,也就是說行為受狀態約束的情況下可以使用狀態模式,而且使用時,物件的狀態最好不要超過5個。
6 擴充套件
無
7 範例
做個網狀多狀態切換的,最好用狀態表來做。。。。
轉自:http://blog.csdn.net/yuanlong_zheng/article/details/7584865
相關文章
- 【設計模式基礎】行為模式 - 8 -狀態(State)設計模式
- 設計模式之狀態模式(State)設計模式
- 設計模式-狀態模式(State Pattern)設計模式
- 設計模式——20狀態模式(State)設計模式
- 行為型設計模式 - 狀態模式詳解設計模式
- 設計模式之狀態模式---State Pattern設計模式
- C#設計模式系列:狀態模式(State)C#設計模式
- JAVA設計模式之 狀態模式【State Pattern】Java設計模式
- .NET下的狀態(State)模式 ------行為型模式模式
- 狀態模式(State)模式
- 設計模式之策略模式和狀態模式(strategy pattern & state pattern)設計模式
- 狀態模式(State pattern)模式
- 設計模式(二十一)----行為型模式之狀態模式設計模式
- 23種設計模式 之 State模式(狀態模式)[C語言實現]設計模式C語言
- 轉載---Dephi狀態模式(State模式)模式
- 行為型模式:狀態模式模式
- 設計模式-狀態模式設計模式
- 設計模式:狀態模式設計模式
- 設計模式-行為型設計模式
- 行為型設計模式設計模式
- 設計模式(十五)狀態模式設計模式
- 設計模式之——狀態模式設計模式
- javascript設計模式狀態模式JavaScript設計模式
- 設計模式(六):狀態模式設計模式
- 設計模式--策略模式Strategy(行為型)設計模式
- (Java)設計模式:行為型Java設計模式
- 設計模式之中介者模式(行為型)設計模式
- 設計模式--命令模式Command(行為型)設計模式
- 設計模式--迭代器模式Iterator(行為型)設計模式
- 設計模式--中介者模式Mediator(行為型)設計模式
- JavaScript設計模式--行為型別--命令模式JavaScript設計模式型別
- PHP 設計模式之狀態模式PHP設計模式
- 簡說設計模式——狀態模式設計模式
- python設計模式狀態模式Python設計模式
- 設計模式20之狀態模式設計模式
- 極簡設計模式-狀態模式設計模式
- GoLang設計模式14 - 狀態模式Golang設計模式
- Python設計模式-狀態模式Python設計模式