設計模式 目錄

浪了個五一,就發現CSDN在側邊自帶博客目錄了,再也不用在正文裏面t o c顯示目錄好長好長了XD !
所以下一步我許願,CSDN出一個markdown的head folder,編輯文章再也不用不停翻頁了。

ref

  • GoF的肯定是必讀的,不說了。什麼大話設計模式啊,Head Fisrt Design Pattern之類的,隨手翻了翻…emm感覺還是直接看GOF吧,雖然不一定能把所有精髓都掌握 (太難了) ,但是讀懂入門也是沒問題的啊
  • newplan推薦的 (以及newplan本人的倉庫XD
  • 李建忠設計模式

    前兩個都是基於JAVA的,這個是基於C++的(現在市面上用C++寫的真的很少…
    代碼和slide網上也有,爲了不侵權就不share了,有心人自己找下

  • 侯捷的設計模式講座的slide(從stl源碼出發…留着以後再看,新入坑不建議)

提綱挈領

基礎知識

  • 類、接口、類圖

在這裏插入圖片描述

  • 關係
    前兩個都有has-a的邏輯,只不過第一個是has-part,第二個是has-whole;
    後兩個都有is-a的邏輯

    • 依賴關係(弱耦合
      用你的方法/功能而不是用你,“人”打電話,用到“手機”的撥號功能

    下面那個引出去的虛線是類的實現的意思,跟依賴的那個虛線+箭頭沒有關聯。
    在這裏插入圖片描述

    • 關聯關係(學會辨析 ,尤其二三
      • 普通關聯
        單向、雙向均有。相互要用到對面的整個對象(而不僅僅某個功能了)。例如,老師和學生的關係圖,每個老師可以教多個學生,每個學生也可向多個老師學,他們是雙向關聯。

        忽略那個teaches to 會更方便記憶
        在這裏插入圖片描述

      • 聚合關係(強耦合
        整體與部分(has-a),成員對象是整體對象的一部分,但是成員對象可以脫離整體對象而獨立存在。例如,學校與老師的關係,學校包含老師,但如果學校停辦了,老師依然存在。

        在這裏插入圖片描述

        • 組合關係(更強耦合
          也表示類之間的整體與部分的關係,但它是一種更強烈的聚合關係,是 cxmtains-a 關係。整體對象可以控制部分對象的生命週期,一旦整體對象不存在,部分對象也將不存在,部分對象不能脫離整體對象而存在。例如,頭和嘴的關係,沒有了頭,嘴也就不存在了。

          在這裏插入圖片描述

      • 泛化關係
        耦合度最大,is-a 的關係

        在這裏插入圖片描述

      • 實現關係

        在這裏插入圖片描述

設計原則

  • DIP 太重要了
    在這裏插入圖片描述

  • OCP
    在這裏插入圖片描述

  • SRP
    在這裏插入圖片描述

  • LSP
    在這裏插入圖片描述

  • ISP
    在這裏插入圖片描述

  • 組合優於繼承
    在這裏插入圖片描述

  • 封裝變化點
    在這裏插入圖片描述

    • 其實這個跟DIP原則是一致的,如果違反了這兩條其中一個,另一個也滿足不了(這幾個原則實際上是從不同角度看代設計模式這個事情
  • 面向接口設計
    在這裏插入圖片描述

    • “一個產業強盛與否的標誌就是是否接口標準化”

重構關建技法

在這裏插入圖片描述

  • 非常關鍵
  • 學到後面會發現是其實是從多個角度看待代碼這件事。(設計原則也是,多個角度罷了

模式列表

  • 總表

在這裏插入圖片描述

根據目的劃分

創建型模式

用於描述“怎樣創建對象”,它的主要特點是“將對象的創建與使用分離”。GoF 中提供了單例、原型、工廠方法、抽象工廠、建造者等 5 種創建型模式。

  • 單例
  • 原型
  • 工廠方法
  • 抽象工廠
  • 建造者

結構型模式

用於描述如何將類或對象按某種佈局組成更大的結構

  • 代理
  • 適配器
  • 橋接
  • 裝飾
  • 外觀
  • 享元
  • 組合

行爲型模式

  • 模板方法
  • 策略
  • 命令
  • 職責鏈、
  • 狀態
  • 觀察者
  • 中介者
  • 迭代器
  • 訪問者
  • 備忘錄
  • 解釋器

根據作用範圍劃分

根據模式是主要用於類上還是主要用於對象上來分,這種方式可分爲類模式和對象模式兩種

類模式

用於處理類與子類之間的關係,這些關係通過繼承來建立,是靜態的,在編譯時刻便確定下來了。GoF中的工廠方法(類)適配器模板方法解釋器屬於該模式。

對象模式

用於處理對象之間的關係,這些關係可以通過組合或聚合來實現,在運行時刻是可以變化的,更具動態性。GoF 中除了以上 4 種,其他的都是對象模式。

從封裝變化角度劃分(李建忠老師)

在這裏插入圖片描述



系列博客目錄

按照李建忠老師的分類進行學習的。說實話,李老師的課真的驚豔我,裂 牆 安 利 !
雖然之前邊耐政老師(老師必須擁有姓名XD)講得也很不錯(按照GoF的進行教學),讓我簡單入了個門並且讓我意識到了設計模式的重要性,但是由於閱歷以及課程組織的原因,仍是十分懵懂。

組件協作

  • 模板、觀察者、策略

單一職責

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