1. 程式人生 > 實用技巧 >設計模式學習筆記(一):設計模式

設計模式學習筆記(一):設計模式

1 前言

軟體開發技術包含“招式”與“內功”,其中,程式語言,開發技術,著名框架可以認為是“招式”,而資料結構,演算法,設計模式,重構,軟體工程等則為“內功”。“招式”可以很快學會,但是“內功”的修煉需要更長的時間。對設計模式的學習會令“內功”大增,配合日益純熟的“招式”,軟體開發“功力”想必會達到一個新境界。下面來正式踏入修煉設計模式之旅。

2 設計模式

2.1 來源

模式是在特定環境下人們解決某類重複出現的問題的一套成功或有效的解決方案。
GoF(Gang of Four,簡稱GoF,分別是Erich Gamma,Richard Helm,Ralph Johnson,John Vlissides)將模式的概念引入軟體工程領域,標誌著軟體模式的誕生。軟體模式是將模式的一般概念應用與軟體開發領域,即軟體開發的總體指導思想或參照樣板。軟體模式並非僅限於設計模式,還包括架構模式,分析模式和過程模式等。
在軟體模式中,設計模式是研究最為深入的分支。設計模式用於在特定條件下為一些重複出現的問題提供合理的,有效的解決方案。

2.2 定義

設計模式一般定義如下:

設計模式是一套被反覆使用的,多數人知曉的,經過分類編目的,程式碼設計經驗的總結,使用設計模式是為了可重用程式碼,
讓程式碼更容易被他人理解並且提高程式碼的可靠性。

設計模式一般包含的要素:

  • 模式名稱
  • 問題
  • 目的
  • 解決方案
  • 效果

其中關鍵要素為模式名稱,問題,解決方案以及效果:

  • 模式名稱:模式的命名
  • 問題:描述了應該在何時使用模式,包括了設計中存在的問題以及問題存在的原因
  • 解決方案:描述了一個設計模式的組成部分,以及這些組成部分之間的相互關係,各自的職責和協作方式,通常解決方案通過UML類圖和核心程式碼進行描述
  • 效果:描述了模式的優缺點以及使用模式時應權衡的問題

GoF設計模式有23個,模式分類可以按照用途或者處理方式進行分類,按照用途分類的話,可以分為:

  • 建立型模式:主要用於描述如何建立物件
  • 結構型模式:主要用於描述如何實現類或物件的組合
  • 行為型模式:主要用於描述類或物件怎麼互動以及怎樣分配職責

根據處理方式分類,可以分為:

  • 類模式
  • 物件模式

兩種分類模式通常結合使用,比如單例模式是物件建立型模式。

3 常用設計模式

3.1 建立型模式

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

3.2 結構型模式

  • 介面卡模式
  • 橋接模式
  • 組合模式
  • 裝飾模式
  • 外觀模式
  • 享元模式
  • 代理模式

3.3 行為型模式

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

4 設計模式用途

  • 能夠實現可維護性複用的設計方案,提高設計與開發效率
  • 設計模式提供了一套通用的設計詞彙和一種通用的形式來方便開發人員之間的溝通以及交流,使得設計方案更加通俗易懂。因為設計模式跨語言,跨平臺,跨應用,跨國界
  • 大部分設計模式都兼顧了系統的可重用性以及可擴充套件性,使得可以更好地重用一些已有的設計方案、功能模組以及一個完整的軟體系統
  • 合理使用設計模式並對設計模式的使用情況進行文件化,將有助於別人更快地理解系統

5 總結