《Head First 設計模式》 總結

2021-06-20 21:11:41 字數 2825 閱讀 6695

什麼是模式?

模式是在某種情景下對某些問題的解決方案。

是不是一定用上模式的**才是好**?

不是,用簡單合適的方法解決問題。不要遇到什麼問題都用必殺技,必殺技也需要醞釀的時間,如果可以一拳把對方秒殺的話,壓根沒必要用必殺技。

那什麼時候才需要用設計模式?

設計模式不是刻意去運用的,而是遇到某個情景,觸發到你的印象種的某些設計模式的條件,那麼意味著用它們可以減少日後的維護成本,總的來時使用設計模式是乙個很自然的過程。

《head first 設計模式》提到的設計模式

模式描述裝飾者

包裝乙個類,提供新的行為。

狀態封裝了基於狀態的行為,並使用委託在行為之間切換。

迭代器在物件的集合之中遊走,而不暴露集合的實現。

外觀簡化一群類的介面。

策略封裝可以互換的行為,並使用委託來決定要使用哪乙個。

**包裝物件,以控制對此物件的訪問。

工廠方法

由子類決定要建立的具體類是哪乙個。

介面卡封裝物件,提供不同介面。

觀察者讓物件能夠在狀態改變時被通知。

模板方法

由子類決定如何實現乙個演算法中的步驟。

組合客戶用一致的方式處理物件集合和單個物件。

單件確保有且只有乙個物件物件被建立。

抽象工廠

允許建立物件的家族,而無需制定他的具體類。

命令封裝請求成為物件。

ps:下文會列舉簡單的例子解析。

oo基礎

抽象封裝

多型繼承

oo原則

封裝變化

多用組合,少用繼承

針對介面程式設計,不針對實現程式設計

為交換物件之間的松耦合設計而努力

類應該對擴充套件開放,對修改關閉

依賴抽象,不依賴具體類

只和朋友交談

別找我,我會找你

類應該只有乙個改變的理由

個人觀點: 整個設計模式的核心是為了以後更好的維護,所以設計原則 為高內聚,低耦合,詳細的原則,上文oo原則提到。

設計模式例項解釋(非**):

裝飾者:

使用條件:給乙個類提供新的行為。

平民+手槍 = 民警

民警+衝鋒槍 = 特種兵

...狀態:

使用條件:行為類,存在多種狀態而導致有多種行為,每次維護需要修改裡面的**(if...),所有把它的每個狀態定義為乙個類方便日後拓展。

行為:學習 + 說話 + ...

狀態:喜怒哀樂...

狀態類:

喜:好好學習 + 滔滔不絕...

怒:不想學習 + 說話很憤青...

哀:不想學習 + 沉默寡言...

樂:越學越興奮 + 主動找人分享...

迭代器:

使用條件:給外界提供乙個方法,呼叫它便可獲取不同類的資料,外界不需要接觸其底層。

a (boss)

b (管理層)

c (底層:c1生產部,c2運輸部、c3市場部...)

a需要知道底層員工的工作時間

c 的每乙個類實現乙個相同的方法(介面b),a 通過詢問 b , 便實現對c的訪問,

外觀:

使用條件:定義乙個高層介面,讓子系統更容易使用。

包青天,手下有很多(公孫策,展昭,張龍趙虎...),辦案的時候,為了方便,叫阿四(介面),而不用具體到某個人辦案即可。

策略:

使用條件:封裝不同的演算法,使他們之間可以互換。實現:通過定義演算法介面,再有不同的演算法實現。

小明 要 吃飯(演算法)

吃飯 =

**:

使用條件:不希望外界直接訪問類,需要乙個輔助類作為媒介,選擇性地提供資訊。

邀請明星做嘉賓

寶潔公司(邀請方)—— 經紀人 —— 大明星

工廠方法:

使用條件:產品跟生產過程分開。

漢堡=抽象工廠方法:

使用條件:把物件內部資料也抽象了。

漢堡 from

漢堡 = 生菜(抽象)

介面卡:

使用條件:已有介面,但需要轉換才能產生出目標介面。

蘋果充電器->介面卡->插座

觀察者:

使用條件:不需要主動探測資料來源是否有更新,當在資料來源註冊之後,資料若有更行,資料來源會主動發通知過來。

老師報置作業——>學委——>學生(觀察者)

模板方法:

使用條件:使用泛化的思想,把不同類中的類似方法抽象出來。

常跟迭代器組合一起運用。

各種排序演算法

組合:

使用條件:讓我們以樹形方式建立物件的結構,以一致的方式,處理物件以及物件的組合。

列出a公司所有**產品名稱

a公司=

b公司=

單件:

使用條件:確保只有只有乙個物件產生。

洗手間只有乙個,由所有人共享。

命令:

一鍵xx,如一鍵刷機。

經典書籍:

《design patterns》

headfirst設計模式

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

HeadFirst 設計模式 工廠模式

定義乙個建立物件的介面,由子類決定要例項化的類。工廠方法將類例項推遲到子類。依賴倒置。第一種方式是 class pizzastore public pizza orderpizza string type class pizzafactory pizza pizza null 將pizza這個例項提...

HeadFirst 設計模式 復合模式

模式通常被一起使用,並被組合在同乙個設計解決方案中。復合模式定義 復合模式在乙個解決方案中結合兩個或多個模式,以解決一般或重 生的問題。mvc,mode 模型 view 檢視 controller 控制器 分別是mvc的三個部分。使用mvc模式,目的是為了解耦,各模組部分只需要處理相應的內容。檢視層...