設計模式介紹之一:開篇概述

    這是一系列文章,原本是我撰寫的公司內部講義。最近重新熟悉設計模式翻了出來,再溫習一下。

    本文的目的

  • 介紹設計模式
  • 在開發過程中主動使用設計模式
  • 使用設計模式來重構已有程式碼
  • 不是完整的設計模式參考和詳解,僅僅是推薦

    什麼是設計模式

   設計模式的系統性概念是 GoF 整理並提出來的。 GoF (又稱“四人幫”,即 Erich Gamma,Richard Helm,Ralph Johnson,John Vlissides )的《設計模式》一書中有詳細的介紹。《C 程式設計思想》第二卷也有介紹和典型模式的 C 實現。

    我們引用一下設計模式的通俗解釋:設計模式(Design pattern)是一套被反覆使用、多數人知曉的、經過分類編目的、程式碼設計經驗的總結。使用設計模式是為了可重用程式碼、讓程式碼更容易被他人理解、保證程式碼可靠性。

    其實這個解釋還是不夠明晰,最好是閱讀 GoF 的《設計模式》一書,關於設計模式是這麼定義的:每一個模式描述了一個在我們周圍不斷重複發生的問題以及該問題的解決方案的核心。

    模式的四個基本要素

  1. 模式名稱(pattern name),用一兩個詞描述模式的問題、解決方案和效果
  2. 問題(problem),描述應該在何時使用模式
  3. 解決方案(solution),描述設計的組成成分,它們之間的關係及各自的職責和協作方式。
  4. 效果(consequences),描述模式應用的效果及使用模式應權衡的問題。

    設計模式和框架

    這是經常容易混淆或者交疊的兩個概念,下面幾點可以作為參考,對比兩個概念。

  • 框架( Framework )是構成一類特定軟體可複用設計的一組相互協作的類。比如 Qt , EJB( Enterprise Java Beans )等。
  • 設計模式的目的是增加程式碼複用和可維護性
  • 框架強調設計複用,必然要引入設計模式
  • 瞭解設計模式有助於理解和使用框架
  • 設計模式比框架更抽象
  • 設計模式是比框架更小的體系結構元素
  • 框架比設計模式更加特例化

    設計模式分類

    一般將設計模式分為建立型、結構型、行為型三類。下圖是 GoF 《設計模式》中的一張表:

    如何選擇設計模式

    下面是摘自 GoF 《設計模式》 1.7 節的內容:

  • 考慮設計模式是怎樣解決設計問題的
  • 瀏覽模式的意圖部分
  • 研究模式怎樣互相關聯
  • 研究目的相似的模式
  • 檢查重新設計的原因
  • 考慮你的設計中哪些是可變的

    如何使用設計模式

    下面是摘自 GoF 《設計模式》 1.8 節的內容:

  • 大致瀏覽一遍模式
  • 回頭研究結構部分、參與者部分和協作部分
  • 看程式碼示例部分,看看這個模式程式碼形成的具體例子
  • 選擇模式參與者的名字,使他們在應用上下文中有意義
  • 定義類
  • 定義模式中專用於應用的操作名稱
  • 實現執行模式中責任和協作的操作

    本系列檔案介紹的模式

    本文不是《設計模式》的完整講解,僅僅是作為一個推介,希望大家可以在軟體開發中主動使用設計模式。

    先介紹下面幾種簡單、常用的(主要基於我的程式設計經驗),後續再介紹其他的模式:

  • Singleton
  • Factory
  • Command
  • Observer
  • Chain of  Responsibility