【設計模式】外觀和建造---總結


  • 外觀模式
  • 背景:股票1、2、3、國債1、房地產1等這些都具有相同的方法:買入、賣出。於是,抽象出一個基金類,基金由以上類聚合而成,那麼客戶端只需認識基金即可,不需理解其內部,即股票、國債和房地產等。這樣一來,就解決了對股票、國債、房地產不熟悉的人的買股問題,他們只需買基金即可,不需要具體知道買的是什麼。
  • 特點:一組類似的類(股票一、二、三、國債、房地產)——聚合——一個類(基金)。客戶端識別這一個類(基金),即可方便使用這一組類(股票一、二、三、國債、房地產)。
  • 用到的原則:依賴倒轉原則和迪米特法則。
  • 優點:1、迪米特法則使得客戶端簡單;2、便於擴展。
  • 缺點:多定義了一個類。
  • 感受之所以叫外觀模式,可能是因爲此模式,不需你具體瞭解股票、國債、房地產等,只需你知道基金這個表層即可。


  • 建造者模式
  • 背景:爲了避免“丟胳膊丟腿”的情況發生,使用了建造者模式。
  •     如何去避免呢?根據依賴倒轉原則,“抽象不應該依賴細節,細節應該依賴抽象”。在這裏是:人不應該頭、身體、左右手、左右腳這些具體細節的畫法,而應該具體畫法依賴於人。通俗點說:你要求系統畫個“胖人”出來,系統具體執行那個細節依賴於你這個抽象的“胖人”。
  • 特點:抽象一個Builder;ThinBuilder、FatBuilder等這些具體人,繼承BuilderBuilder是Director的組成部分。
  • 原則:依賴倒轉原則
  • 優點:1、客戶端識簡單;2、便於擴展。
  • 感受建造一個個不同的小人,詳細的描述和生成小人分開。生成小人用到了詳細描述。

  • 策略模式的特點:抽象一個CashSuper;CashNormal、CashRebate、CashReturn等具體的收費標準,繼承CashSuper;CashSuper是CashContext的組成部分。
  •     大家看一下策略模式和建造者模式的UML圖,就可以發現,他們是一樣的。都用到了繼承和聚合。

  • 敲代碼感受
  •     學習設計模式過程中的感受,就拿學習建造者模式舉例子。   
  •     有一天下午,這個模式我不知不覺竟然學習了2個小時。一方面時間過的好快,另一方面這個模式我好像還沒有學到什麼東西呢,時間就這麼過去了。感覺有點低效。
  •     低效原因:一:建造者這個例子中生詞比較多,剛開始產生了抵觸心理;二:動手敲代碼後,遇到意向不到的問題:比如:1、爲什麼在picturebox1的click事件中可以運行處結果,而在form-load就不可以?2、新建項目時,具體用哪個項目不太清楚?3、form1.cs和program.cs有什麼聯繫?

  •     之前,爲了使速度快一些,也爲了首先理解一下設計模式,實際動手去實現功能的時候,比較少。到現在,我實際動手去做時,發現會遇到各種你意想不到的情況,解決這些問題時,我有兩點感受:一、這些問題和設計模式具體模式的理解沒有關係;二、這些問題可以鍛鍊你解決問題的能力。雖然,這個階段是在學習設計模式,但是,敲代碼的過程中,你不僅可以加深理解設計模式,而且也可以提高實際操作能力。所以,我們何樂而不爲呢!還是多多去實現代碼吧!(這句話主要是對我自己說!)
  •     敲代碼還有好處,在敲代碼的過程中可以讓你集中精力,有助於理解。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章