什麼是模式?
模式是在某種情景下對某些問題的解決方案。
是不是一定用上模式的**才是好**?
不是,用簡單合適的方法解決問題。不要遇到什麼問題都用必殺技,必殺技也需要醞釀的時間,如果可以一拳把對方秒殺的話,壓根沒必要用必殺技。
那什麼時候才需要用設計模式?
設計模式不是刻意去運用的,而是遇到某個情景,觸發到你的印象種的某些設計模式的條件,那麼意味著用它們可以減少日後的維護成本,總的來時使用設計模式是乙個很自然的過程。
《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模式,目的是為了解耦,各模組部分只需要處理相應的內容。檢視層...