1、概念
當乙個物件的內在狀態改變時允許改變其行為,這個物件看起來像是改變了其類。主要解決,當乙個物件狀態轉換的條件表示式過於複雜時把狀態的判斷邏輯轉移到表示不同狀態的一系列類當中。將複雜的邏輯判斷簡化。
2、模型
有三個角色,
state——抽象狀態類,封裝乙個與特定狀態相關的行為。
createstate——具體狀態,實現乙個特定狀態的行為。
context——維護乙個createstate例項,該例項是根據狀態傳入的。
程式實現:
public abstract class state
public class createstatefirst:state }
public class createstatesecond:state }
public class context
public state curretstate
get}
public void dealwith()
} static void main(string args)
這樣將各個狀態對應的行為分開來(createstatefirst,createstatesecond),它們由context負責維護。
下面以乙個專案中的小例子看一下狀態模式的應用。需求:根據每天不同的時間切換軟體的**顏色,以模型表示。
顏色抽象狀態類:
public abstract class colorstate
public class morningcolor:colorstate
else
}}
public class afternooncolor:colorstate
else
}}
public class eveningnooncolor:colorstate
else
}}
public class software
public int time
public void setcolorstate(colorstate cstate)
public void show()
}
static void main(string args)
分別顯示:早中晚的顏色。
設計模式讀書筆記 State(狀態)
意圖 允許乙個物件在其內部狀態改變時改變它的行為。物件看起來似乎修改了它的類。結構圖 來自 23種設計模式 郗曉勇 實現 context namespace ns state virtual context void request void private friend class state v...
作業13 讀書筆記
我閱讀的演算法書籍是李煜東的 演算法競賽高階指南 翻開目錄,我第一眼關注到的就是資料結構高階這一類,畢竟上學期剛學資料結構,相信這一塊是能夠最快接受的知識點。第一節講的是並查集,這還是比較簡單。並查集就分為兩步,第一步是查詢乙個元素屬於哪個集合,第二步是把兩個小集合合併成乙個大集合。那麼合併集合的依...
《設計模式之禪》讀書筆記 21 狀態模式
定義 當乙個物件內在狀態改變時允許其改變行為,這個物件看起來像改變了其類。類圖 state抽象狀態角色 介面或抽象類,負責物件狀態定義,並且封裝環境角色以實現狀態切換。concretestate具體狀態角色 每乙個具體狀態必須完成兩個職責 本狀態的行為管理以及趨向狀態處理,通俗地說,就是本狀態下要做...