HeadFirst設計模式學習筆記7 狀態模式

2021-06-01 11:16:32 字數 458 閱讀 6239

定義:允許物件在內部狀態改變時改變它的行為,物件看起來好像修改了它的類。

這句話的意思是,類物件的行為,不僅受當前他所處於的狀態影響,還受他執行動作的影響,而且伴隨著內部狀態的改變。同時,如果我們能修改例項物件的狀態,那麼看起來我們好像改變了物件的例項化的類。類圖如下:

狀態模式的類圖很像策略模式的,但他們有本質的不同,主要表現在兩種模式的設計意圖不同:

l  狀態模式context的行為是在各個狀態裡隨時切換的,隨著時間變化而不停改變,而使用者是感受不到這種變化的;策略模式的context行為一般是各戶主動指定的,也就是說具體所要採用的策略使用者是知道的。而且對於策略模式來說,通常只有乙個特定的最適合的策略物件。

l  策略模式是除了繼承之外的一種彈性替代方案,繼承會因為繼承某乙個特定父類而被父類行為困住,組合的方式可以避免;而狀態模式是context中無數if語句塊的替代方案,可以使context內簡單的改變物件狀態來改變物件的行為。

《Head first設計模式》學習筆記

開閉原則的意思是 對擴充套件開放,對修改關閉。在程式需要進行拓展的時候,不能去修改原有的 實現乙個熱插拔的效果。簡言之,是為了使程式的擴充套件性好,易於維護和公升級。想要達到這樣的效果,我們需要使用介面和抽象類,後面的具體設計中我們會提到這點。黎克特制代換原則是物件導向設計的基本原則之一。黎克特制代...

headfirst設計模式

花了一周多一點的時間看完了headfirst的設計模式。看完之後有一種恍然大悟的感覺,仔細想想有覺得自己好像什麼也看懂。簡單說下對這本書的一點感悟吧,headfirst的書比較通俗易懂,之前看了四人幫的設計模式,看一半就有一種痛不欲生的感覺,自己水平有限,看不懂,也就沒在勉強自己了。對於模式其實簡單...

HeadFirst設計模式學習筆記02

執行時擴充套件,遠比編譯時繼承威力大。熟悉了裝飾的技巧,能夠在不改變任何底層 的情況下,給你的物件賦予新的職責。星巴茲starbuzz以擴張速度快聞名,準備更新訂單系統,以適應他們的飲料 要求。原先類的設計 現在想購買咖啡時,可以要求在其中加入各種調料,如蒸奶 steamed milk 豆漿 soy...