- 外觀模式
- 背景:股票1、2、3、國債1、房地產1等這些都具有相同的方法:買入、賣出。於是,抽象出一個基金類,基金由以上類聚合而成,那麼客戶端只需認識基金即可,不需理解其內部,即股票、國債和房地產等。這樣一來,就解決了對股票、國債、房地產不熟悉的人的買股問題,他們只需買基金即可,不需要具體知道買的是什麼。
- 特點:一組類似的類(股票一、二、三、國債、房地產)——聚合——一個類(基金)。客戶端識別這一個類(基金),即可方便使用這一組類(股票一、二、三、國債、房地產)。
- 用到的原則:依賴倒轉原則和迪米特法則。
- 優點:1、迪米特法則使得客戶端簡單;2、便於擴展。
- 缺點:多定義了一個類。
- 感受:之所以叫外觀模式,可能是因爲此模式,不需你具體瞭解股票、國債、房地產等,只需你知道基金這個表層即可。
- 建造者模式
- 背景:爲了避免“丟胳膊丟腿”的情況發生,使用了建造者模式。
- 如何去避免呢?根據依賴倒轉原則,“抽象不應該依賴細節,細節應該依賴抽象”。在這裏是:人不應該頭、身體、左右手、左右腳這些具體細節的畫法,而應該具體畫法依賴於人。通俗點說:你要求系統畫個“胖人”出來,系統具體執行那個細節依賴於你這個抽象的“胖人”。
- 特點:抽象一個Builder;ThinBuilder、FatBuilder等這些具體人,繼承Builder;Builder是Director的組成部分。
- 原則:依賴倒轉原則
- 優點:1、客戶端識簡單;2、便於擴展。
- 感受:建造一個個不同的小人,詳細的描述和生成小人分開。生成小人用到了詳細描述。
- 策略模式的特點:抽象一個CashSuper;CashNormal、CashRebate、CashReturn等具體的收費標準,繼承CashSuper;CashSuper是CashContext的組成部分。
- 大家看一下策略模式和建造者模式的UML圖,就可以發現,他們是一樣的。都用到了繼承和聚合。
- 敲代碼感受
- 學習設計模式過程中的感受,就拿學習建造者模式舉例子。
- 有一天下午,這個模式我不知不覺竟然學習了2個小時。一方面時間過的好快,另一方面這個模式我好像還沒有學到什麼東西呢,時間就這麼過去了。感覺有點低效。
- 低效原因:一:建造者這個例子中生詞比較多,剛開始產生了抵觸心理;二:動手敲代碼後,遇到意向不到的問題:比如:1、爲什麼在picturebox1的click事件中可以運行處結果,而在form-load就不可以?2、新建項目時,具體用哪個項目不太清楚?3、form1.cs和program.cs有什麼聯繫?
- 之前,爲了使速度快一些,也爲了首先理解一下設計模式,實際動手去實現功能的時候,比較少。到現在,我實際動手去做時,發現會遇到各種你意想不到的情況,解決這些問題時,我有兩點感受:一、這些問題和設計模式具體模式的理解沒有關係;二、這些問題可以鍛鍊你解決問題的能力。雖然,這個階段是在學習設計模式,但是,敲代碼的過程中,你不僅可以加深理解設計模式,而且也可以提高實際操作能力。所以,我們何樂而不爲呢!還是多多去實現代碼吧!(這句話主要是對我自己說!)
- 敲代碼還有好處,在敲代碼的過程中可以讓你集中精力,有助於理解。
【設計模式】外觀和建造---總結
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.