在很多情況下我們物件的行為依賴於它的乙個或者多個變化的屬性,這些可變的屬性我們稱之為狀態,也就是說行為依賴狀態,即當該物件因為在外部的互動而導致他的狀態發生變化,從而它的行為也會做出相應的變化。對於這種情況,我們是不能用行為來控制狀態的變化,而應該站在狀態的角度來思考行為,即是什麼狀態就要做出什麼樣的行為。這個就是狀態模式。
所以狀態模式就是允許物件在內部狀態發生改變時改變它的行為,物件看起來好像修改了它的類。
在狀態模式中我們可以減少大塊的if…else語句,它是允許態轉換邏輯與狀態物件合成一體,但是減少if…else語句的代價就是會換來大量的類,所以狀態模式勢必會增加系統中類或者物件的個數。
同時狀態模式是將所有與某個狀態有關的行為放到乙個類中,並且可以方便地增加新的狀態,只需要改變物件狀態即可改變物件的行為。但是這樣就會導致系統的結構和實現都會比較複雜,如果使用不當就會導致程式的結構和**混亂,不利於維護。
狀態模式包含如下角色:
(行為型模式)State 狀態模式
狀態模式 當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。狀態模式允許乙個物件在其內部狀態改變的時候改變行為。這個物件看上去像是改變了它的類一樣。狀態模式把所研究的物件的行為包裝在不同的狀態物件裡,每乙個狀態物件都屬於乙個抽象狀態類的乙個子類。狀態模式的意圖是讓乙個物件在其內...
22 State 狀態(行為型模式)
問題的提出 物件狀態影響物件行為。物件擁有不同的狀態,往往會行使不同的行為 動機 motivation 在軟體構建過程中,某些物件的狀態如果改變,其行為也會隨之而發生變化,比如文件處於唯讀狀態,其支援的行為和讀寫狀態支援的行為就可能完全不同。如何在執行時根據物件的狀態來透明地更改物件的行為?而不會為...
設計模式 行為型模式 State模式
允許物件在內部狀態發生改變時改變它的行為,物件看起來好像修改了它的類 何時使用 中包含大量與物件狀態有關的條件語句 如何解決 將各種具體的狀態類抽象出來 關鍵 狀態模式的介面中有乙個或者多個方法 缺點 注意事項 在行為受狀態約束的時候使用狀態模式,而且狀態不超過 5 個 state.hpp ifnd...