1. 程式人生 > 實用技巧 >【設計模式】設計模式概述

【設計模式】設計模式概述

設計模式概述

軟體設計模式(Design pattern),又稱設計模式,是一套被反覆使用、多數人知曉的、經過分類編目的、程式碼設計經驗的總結。設計模式主要是為了解決某類重複出現的問題而出現的一套成功或有效的解決方案。設計模式提供一種討論軟體設計的公共語言,使得熟練設計者的設計經驗可以被初學者和其他設計者掌握。設計模式還為軟體重構提供了目標。

由來

軟體設計模式源自於建築學。Christopher Alexander在著作《A Pattern Language: Towns, Buildings, Construction》中把這些認同規律歸納為253個模式,對每一個模式(Pattern)都從Context(前提條件)

ThemeProblem(目標問題)Solution(解決方案)三個方面進行了描述,並給出了從使用者需求分析到建築環境結構設計直至經典例項的過程模型。

設計模式一般包含模式名稱、問題、目的、解決方案以及效果等要素。

  • 模式名稱(Pattern Name):通過一兩個詞來描述模式的問題,解決方案和效果,以便更好地理解模式並方便開發人員之間的交流,絕大多數模式都是根據其功能或模式結構來命名的。
  • 問題(Problem):描述應該在何時使用模式,包含了設計中存在的問題以及問題存在的原因。
  • 解決方案(Solution):描述一個設計模式的組成成分,以及這些組成成分之間的相互關係、各自的職責和協作方式,通常解決方案通過UML
    類圖和核心程式碼來進行描述。
  • 效果(Consequences):描述了模式的優缺點以及在使用模式時應該權衡的問題。

作用

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

分類

狹義的設計模式一般分為三大類共計23種,但是隨著技術的發展也一直在補充擴充套件。

型別 含義 種類
建立型模式 關注物件的建立過程 單例模式、簡單工廠模式、抽象工廠模式、工廠方法模式、原型模式、建造者模式
結構型模式 關注如何將現有類或物件組織在一起形成更加強大的結構 介面卡模式、橋接模式、組合模式、裝飾模式、外觀模式、享元模式、代理模式
行為者模式 關注系統中物件之間的互動,研究系統在執行時物件之間的相互通訊與協作,進一步明確物件的職責 職責鏈模式、命令模式、直譯器模式、迭代器模式、中介者模式、備忘錄模式、觀察者模式、狀態模式、策略模式、模板方法模式、訪問者模式

關係

與軟體框架的關係

軟體框架伴隨著軟體工程的發展而出現,所謂的軟體框架,是提取了特定領域的軟體的共性部分所形成的軟體體系,它並不是一個成熟的軟體,更像是一個半成品。開發者在框架之上,可以進行既可靠又快速的二次開發。

設計模式和軟體框架在軟體設計中是兩個不同的領域:

  • 設計模式主要是為了解決某類重複出現的問題而出現的一套成功或有效的解決方案,它可被應用於不同的框架和被不同的語言所實現。但是軟體框架則是一個應用的體系結構,是一種或多種設計模式和程式碼的混合體。
  • 設計模式相較於軟體框架更容易移植,並且可以用多種語言實現。但是軟體框架則受限於領域大環境。雖然如此,但是它們都重視軟體複用提高開發效率

與軟體架構的關係

軟體架構是一個巨集觀的概念,它主要考慮軟體的整體結構、層次劃分以及不同部分之間的協作和互動等,它著眼於整體。

總體來說,軟體架構可以由不同的框架和不同的設計模式,再加上特定的構件組合來實現框架可以根據設計模式結合特定程式語言和環境來實現設計模式就是解決單一問題的設計思路和解決方法

優點

  • 設計模式融合了眾多專家的經驗,以一種標準的形式供廣大開發人員使用,通俗的設計詞* 匯和通用的語言方便開發人員交流和學習。
  • 設計模式使人們可以更簡單方便地複用成功的設計,使新開發者更容易理解設計思路。
  • 設計模式使設計方案更加靈活、易於修改。
  • 設計模式的使用將提高軟體系統的開發效率和軟體質量,節約開發成本。
  • 設計模式有助於初學者深入理解面向物件思想。