軟件工程筆記:從重構到模式

從重構到模式

— 筆記整理自 北京理工大學 計算機學院

什麼是模式

  • 模式記錄了專家的經驗,並且讓非專家也能理解,其核心是對真實世界的抽象和組織
  • 模式是發展的,是經過驗證的專家經驗的重用
  • 模式的名稱構成了一份詞彙表,幫助開發者更好的交流,更快的理解一個系統,更容易的重組一個系統
  • 模式的構成
    • 語境
    • 問題
    • 解決方案

模式分類

  • 代碼模式——特定編程語言相關
  • 分析模式——透過需求表面瞭解本質問題
  • 設計模式——局部強化
  • 架構模式——軟件系統的基礎結構組織模型
  • 建議學習順序
    • 代碼模式(忽略)
    • 設計模式(重點)
    • 分析模式(瞭解)
    • 架構模式(瞭解)

架構模式

  • 架構模式描述軟件系統裏的基本的結構組織或綱要
  • 架構模式提供一些事先定義好的子系統,指定它們的責任,並給出把它們組織在一起的原則和指南
  • 部分架構模式和設計模式重疊
  • 架構模式常常可以分解成很多個設計模式的聯合使用

設計模式

  • 建築模式:《建築的永恆之道》(The Timeless Way of Building)
  • 專家們使用遷移的思想得出軟件設計模式理論
  • 設計模式是一種對一套相互作用的類的描述
  • 設計模式是一種實踐的總結,是OOP最直接的表現
  • 設計模式的根本意圖是適應需求變化
  • 程序員應該掌握設計模式

Gof設計模式分類

  • 結構型模式 將一組對象組合成更大的結構
  • 行爲型模式 定義系統內對象間的通信,以及複雜程序中的流程控制
  • 創建型模式 通過使用更復雜的創建對象的方法取代new,換取了對需求變更的從容應對

備註:圖片託管於github,請確保網絡的可訪問性

工廠模式

  • 工廠模式專門負責將大量有共同接口的類實例化
  • 工廠模式可以動態決定將哪一個類實例化,不必事先知道每次要實例化哪一個類
  • 工廠模式的形式
    • 簡單工廠模式(Simple Factory)
    • 工廠方法模式(Factory Method)
    • 抽象工廠模式(Abstract Factory)
  • 簡單工廠模式根據提供給它的數據,返回幾個可能類中的一個類的實例
  • 簡單工廠模式實際上不屬於GoF設計模式,但作爲入門比較容易理解

單件模式

  • 單件模式做爲“全局變量”的替代品出現
  • 具有全局變量的特點:全局可見、貫穿應用程序的整個生命期
  • 也具有全局變量不具備的性質:同類型的對象實例只可能有一個
  • 單件模式實現方法
    • 隱藏(private)構造函數
    • 類內維護一個靜態、私有的本類對象的引用
    • 提供靜態公共函數,如GetInstance(),返回類型爲該類的唯一對象的引用

觀察者模式

  • 定義對象間的一種一對多的依賴關係
  • 當一個對象的狀態發生改變時, 所有依賴於它的對象都得到通知並被自動更新
  • 應用場景:當對一個對象的改變需要同時改變其它對象, 而不知道具體有多少對象有待改變
  • 典型應用:MVC架構中,將表示層和數據邏輯層分開,邏輯層數據變化後需要通知多個表示層

觀察者模式結構

備註:圖片託管於github,請確保網絡的可訪問性

設計模式不是全部

  • 濫用設計模式造成過度設計
  • 程序結構的靈活性設計不是基於需求變更的要求
  • 設計模式不應該是一開始就應該關注的
  • 重構的主要目的不是爲了多用設計模式
  • 程序結構的好壞與使用的設計模式的多少無關
  • 體現設計意圖,適度設計

從需求到達設計模式

  • 模式尤其是設計模式常常扮演着過度設計的角色
  • 解決避免過度設計的方法:重構
  • 從需求通過重構到達模式
  • 重構的結果未必一定爲某種設計模式
  • 設計模式是面向對象設計的基石
  • TDD和重構是設計演進的基石

推薦書籍

《REfactoring To Patterns》

模式小結

  • 不同的模式位於不同的層次
  • 架構模式——大尺度,系統級,全局
  • 設計模式——中等尺度,子系統,局部
  • 分析模式——策略,業務模型
  • 代碼模式——小尺度,特定語言,編程技巧
  • 下級層次不會影響到上一級層次
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章