物件導向設計其實就是希望做到**責任的分解,類中函式過長意味著它的責任過於大了,一旦需求有任何更改,這個方法可能都需要修改。這違背了單一職責原則,也違背了開放封閉原則。
狀態模式:當乙個物件的狀態改變時允許改變其行為。這物件看起來像是改變了其類。
狀態模式主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜是的情況。大部分人的一般做法是使用switch--case
或者使用
if--else
進行處理。這會造成乙個問題,分支過多。通過把狀態的判斷邏輯轉移到表示不同狀態的一系列類當中,可以把複雜的判斷邏輯簡化。
state類,抽象狀態類,定義乙個介面以封裝與
context
的乙個特定相關狀態的行為。
concretestate類,具體狀態類,每乙個類實現與
context
的乙個特定相關的行為。
context類,維護乙個
concretestate
類的例項,這個例項定義當前的狀態。
狀態模式的好處:將與特定狀態相關的行為區域性化,並且將不同狀態的行為分割開來。也就是說將特定的狀態特定的行為都放入乙個物件中,由於所有與狀態相關的**都存在於某乙個具體的狀態類中,所以通過
定義新的子類
可以很容易增加新的狀態和轉換,這樣做的目的在於消除條件分支語句,大的分支語句會使他們難以擴充套件和修改。狀態模式通過將各種狀態轉移邏輯分不到state
的子類之間,來減少相互間的依賴。
當乙個兌物件的行為取決於它的狀態時,就可以考慮使用狀態模式了。
state模式同
strategy
有很多相似的地方,兩者的思想都是一致的,只不過封裝的東西不同,
state
封裝的是不同的狀態。而
strategy
封裝的不同的演算法。
**結構圖:
設計模式學習筆記之狀態模式
定義 狀態模式允許物件在內部狀態改變時改變它的行為,物件看起來好像修改了它的類。解決問題 主要解決的是當控制乙個物件狀態轉換的條件表示式過於複雜時的情況。把狀態判斷邏輯轉移到表示不同的一系列類當中,可以把複雜的邏輯判斷簡單化。結構圖 狀態模式所涉及到的角色有 環境 context 角色,也成上下文 ...
設計模式之狀態模式
一 作用 允許乙個物件在其內部狀態改變時改變它的行為,物件看起來似乎修改了它的類。其別名為狀態物件 objects for states 狀態模式是一種物件行為型模式。二 例子 狀態抽象類 abstract class state 具體狀態類,每個狀態對應乙個類 class concretestat...
設計模式之 狀態模式
gof 設計模式 中給狀態模式下的定義為 允許乙個物件在其內部狀態改變時改變它 的行為。這個物件看起來似乎修改了它的類。看起來,狀態模式好像是神通廣大 居然能夠 修改自身的類 能夠讓程式根據不同的外部情況來做出不同的響應,最直接的方法就是在程式中將這些可能發生的外部情況全部考慮到,使用 if els...