iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 3
0

有了前幾篇的基礎後,我們可以來談這次我的主題:「設計模式」。在實際進入到各個不同模式如何實踐前,我們再花些時間了解什麼是設計模式為什麼我們要使用它

設計模式從哪來、它是什麼?

設計模式的源頭 —— 建築學

設計模式的起源是來自於建築學。一位建築師, Christopher Alexander,專注於研究何謂優秀的建築設計何種設計是被世人稱之為美。Alexnder 認為上述兩個問題是有客觀的標準去評價的,而不只是純然僅是個人偏好而已。

本書作者推論

我可以想像到 Alexander 如此捫心自問:

  • 在優秀設計中具備而劣質設計中不具備的是什麼?
  • 在劣質設計中具備而優秀設計中不具備的又是什麼?

Alexander 對模式 (pattern) 下了如是的定義:「每個模式都描述了一個在我們環境中會不斷出現的問題,並進而描述了這個問題解決方案的要素,透過這種方式,解決方案能夠百萬次地反覆應用,但是具體方式又不會完全相同。

建築模式到軟體設計模式

從 90 年代開始,有許多人開始思考把模式的概念引入軟題設計中,其中影響最大的莫過於《DESIGN PATTERNS: Elements of Reusable Object-Oriented Software》。本書的四位作者被大家稱作 GoF (Gang of Four),四人幫。

本書訂立了:

  • 將設計模式應用於軟體設計
  • 說明了編錄和描述設計模式的一種格式
  • 編錄了 23 種設計模式
  • 在這些設計模式上推導出物件導向的策略和方法

模式的特徵

模式的特徵,本書提供如下表:

項目 描述
名稱 每個模式有唯一的一個名稱
意圖 模式的目的
問題 模式要解決的問題(動機)
解決方案 模式如何為問題提供適合其所處環境的一個解決方案
參與者與協作者 模式涉及的實體
效果 使用模式的效果、模式中發揮作用的各種因素
實作 實作方式
一般性結構 典型結構的標準圖

設計模式帶來的好處

為什麼要使用它?

作者提供了三個使用設計模式的理由

  • 避免重蹈前人覆轍,從他人經驗中獲益,用不著為重複出現的問題再次設計解決方案;
  • 確立通用的術語,為開發中的交流與協作建立詞彙的共同基礎和共識;
  • 提供了觀察問題、設計過程和物件導向的更高層次的視角,使我們不會落入「過早實作細節」的陷阱裡。

其他好處

除了上述三點,還有其他好處。

  • 因為設計模式是將軟體設計中已經存在的解決方案整理出一個一般性的描述,所以可以說它們都是久經考驗的解決方案。而且,這些模式往往會使程式碼更易於理解,因而使之更容易維護。
  • 作者也主張,設計模式能夠加深對基本物件導向設計元則的裡解,是相輔相成的概念。

基本的物件導向設計策略

最後,作者也提到 GoF 對物件導向設計原則的建議:

  • 依介面程式設計 (design to interface)
  • 盡量用聚合取代繼承
  • 找出變化並封裝之

以上三個原則會在學習大多數設計模式中使用到。

接下來

下一篇我們會開始介紹設計模式中的 Facade 模式~明天見!


上一篇
DAY4: 類別間的關係
下一篇
DAY6: Facade 模式
系列文
來讀設計模式:Junior developer 跟大家一起練功22
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言