軟件設計模式概述

本節是後面各章學習的基礎,從總體上介紹軟件設計模式的概念與特色、軟件設計模式的基本要素,以及 GoF 的 23 種設計模式簡介。程序員

軟件設計模式的產生背景

「設計模式」這個術語最初並非出如今軟件設計中,而是被用於建築領域的設計中。

1977 年,美國著名建築大師、加利福尼亞大學伯克利分校環境結構中心主任克里斯托夫·亞歷山大(Christopher Alexander)在他的著做《建築模式語言:城鎮、建築、構造(A Pattern Language: Towns Building Construction)中描述了一些常見的建築設計問題,並提出了 253 種關於對城鎮、鄰里、住宅、花園和房間等進行設計的基本模式。

1979 年他的另外一部經典著做《建築的永恆之道》(The Timeless Way of Building)進一步強化了設計模式的思想,爲後來的建築設計指明瞭方向。

1987 年,肯特·貝克(Kent Beck)和沃德·坎寧安(Ward Cunningham)首先將克里斯托夫·亞歷山大的模式思想應用在 Smalltalk 中的圖形用戶接口的生成中,但沒有引發軟件界的關注。

直到 1990 年,軟件工程界纔開始研討設計模式的話題,後來召開了屢次關於設計模式的研討會。

1995 年,艾瑞克·伽馬(ErichGamma)、理査德·海爾姆(Richard Helm)、拉爾夫·約翰森(Ralph Johnson)、約翰·威利斯迪斯(John Vlissides)等 4 位做者合做出版了《設計模式:可複用面向對象軟件的基礎》(Design Patterns: Elements of Reusable Object-Oriented Software)一書,在本教程中收錄了 23 個設計模式,這是設計模式領域裏程碑的事件,致使了軟件設計模式的突破。這 4 位做者在軟件開發領域裏也以他們的「四人組」(Gang of Four,GoF)匿名著稱。

直到今天,狹義的設計模式仍是本教程中所介紹的 23 種經典設計模式。算法

軟件設計模式的概念與意義

有關軟件設計模式的定義不少,有些從模式的特色來講明,有些從模式的做用來講明。本教程給出的定義是大多數學者公認的,從如下兩個方面來講明。編程

1. 軟件設計模式的概念

軟件設計模式(Software Design Pattern),又稱設計模式,是一套被反覆使用、多數人知曉的、通過分類編目的、代碼設計經驗的總結。它描述了在軟件設計過程當中的一些不斷重複發生的問題,以及該問題的解決方案。也就是說,它是解決特定問題的一系列套路,是前輩們的代碼設計經驗的總結,具備必定的廣泛性,能夠反覆使用。其目的是爲了提升代碼的可重用性、代碼的可讀性和代碼的可靠性。設計模式

2. 學習設計模式的意義

設計模式的本質是面向對象設計原則的實際運用,是對類的封裝性、繼承性和多態性以及類的關聯關係和組合關係的充分理解。正確使用設計模式具備如下優勢。框架

  • 能夠提升程序員的思惟能力、編程能力和設計能力。less

  • 使程序設計更加標準化、代碼編制更加工程化,使軟件開發效率大大提升,從而縮短軟件的開發週期。ide

  • 使設計的代碼可重用性高、可讀性強、可靠性高、靈活性好、可維護性強。學習


固然,軟件設計模式只是一個引導。在具體的軟件幵發中,必須根據設計的應用系統的特色和要求來恰當選擇。對於簡單的程序開發,苛能寫一個簡單的算法要比引入某種設計模式更加容易。但對大項目的開發或者框架設計,用設計模式來組織代碼顯然更好。ui

軟件設計模式的基本要素

軟件設計模式令人們能夠更加簡單方便地複用成功的設計和體系結構,它一般包含如下幾個基本要素:模式名稱、別名、動機、問題、解決方案、效果、結構、模式角色、合做關係、實現方法、適用性、已知應用、例程、模式擴展和相關模式等,其中最關鍵的元素包括如下 4 個主要部分。.net

1. 模式名稱

每個模式都有本身的名字,一般用一兩個詞來描述,能夠根據模式的問題、特色、解決方案、功能和效果來命名。模式名稱(PatternName)有助於咱們理解和記憶該模式,也方便咱們來討論本身的設計。

2. 問題

問題(Problem)描述了該模式的應用環境,即什麼時候使用該模式。它解釋了設計問題和問題存在的來龍去脈,以及必須知足的一系列先決條件。

3. 解決方案

模式問題的解決方案(Solution)包括設計的組成成分、它們之間的相互關係及各自的職責和協做方式。由於模式就像一個模板,可應用於多種不一樣場合,因此解決方案並不描述一個特定而具體的設計或實現,而是提供設計問題的抽象描述和怎樣用一個具備通常意義的元素組合(類或對象的 組合)來解決這個問題。

4. 效果

描述了模式的應用效果以及使用該模式應該權衡的問題,即模式的優缺點。主要是對時間和空間的衡量,以及該模式對系統的靈活性、擴充性、可移植性的影響,也考慮其實現問題。顯式地列出這些效果(Consequence)對理解和評價這些模式有很大的幫助。

本文參考於:http://c.biancheng.net/design_pattern/本文作學習參考使用,無商業價值,供你們一塊兒學習

相關文章
相關標籤/搜索