設計模式起源

2021-09-08 11:49:27 字數 2593 閱讀 3975

定義 

設計模式(design pattern)是一套被反覆使用、多數人知曉、經過分類的、**設計經驗的總結。

使用目的:為了**可重用性、讓**更容易被他人理解、保證**可靠性。 設計模式使**編寫真正工程化;設計模式是軟體工程的基石脈絡,如同大廈的結構一樣。

起源 與很多軟體工程技術一樣,模式起源於建築領域,軟體工程只有短短的幾十年,與已經擁有幾千年底蘊的建築工程相比,後者有太多值得學習和借鑑的地方。

哈佛大學的建築學博士克里斯多福.亞歷山卓,是建築學領域的模式之父。他與其研究團隊用了約20年的時間,對住宅和周邊環境進行了大量的調查研究,發現人們對舒適住宅和城市環境存在一些共同的認同規律,將它們歸納成253個模式。對每乙個模式都從前提條件、目標問題、 解決方案三個方面進行了描述,並給出了從需求分析到結構設計再到經典例項的過程模型。

所以,對模式的定義可以抽象為在特定環境下,人們為了解決某類重複出現問題,而總結歸納出來的有效解決方案。

誕生 gof將模式的概念引入軟體工程領域,這標誌著軟體模式的誕生。軟體模式並非僅限於設計模式,還包括架構模式、分析模式和過程模式等,實際上,在軟體開發生命週期的每乙個階段都存在著一些被認同的模式。

軟體模式主要由四部分構成,包括待解決問題、約束條件、解決方案、優點。

軟體模式與具體的應用領域無關,也就是說無論從事的是移動開發、桌面開發、web開發還是嵌入式軟體的開發,都可以使用軟體模式。

在軟體模式中,設計模式是研究最為深入的分支,它融合了眾多專家的設計經驗,已經在成千上萬的軟體中得以應用。 2023年, gof將收集和整理好的23種設計模式彙編成了一本名叫《設計模式》的書,該書的出版也標誌著設計模式正式成為物件導向版軟體工程的乙個重要研究分支。

設計模式分類 

總體來說設計模式分為三大類: 

建立型模式,共五種:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。

結構型模式,共七種:介面卡模式、裝飾器模式、**模式、外觀模式、橋接模式、組合模式、享元模式。

行為型模式,共十一種:策略模式、模板方法模式、觀察者模式、迭代子模式、責任鏈模式、命令模式、備忘錄模式、狀態模式、訪問者模式、中介者模式、直譯器模式。

其實還有兩類: 

並髮型模式和執行緒池模式。如下圖:

設計模式的六個原則 

總原則:開閉原則(open close principle)

開閉原則就是說對擴充套件開放,對修改關閉。在程式需要進行拓展的時候,不能去修改原有的**,而是要擴充套件原有**,實現乙個熱插拔的效果。想要達到這樣的效果,我們需要使用介面和抽象類等。

1、單一職責原則 

不要存在多於乙個導致類變更的原因,也就是說每個類應該實現單一的職責,如若不然,就應該把類拆分。

2、黎克特制替換原則(liskov substitution principle) 

黎克特制代換原則中說,任何基類可以出現的地方,子類一定可以出現。 lsp是繼承復用的基石,只有當衍生類可以替換掉基類,軟體單位的功能不受到影響時,基類才能真正被復用,而衍生類也能夠在基類的基礎上增加新的行為。黎克特制代換原則是對「開-閉」原則的補充。實現「開-閉」原則的關鍵步驟就是抽象化。而基類與子類的繼承關係就是抽象化的具體實現,所以黎克特制代換原則是對實現抽象化的具體步驟的規範。—— from baidu 百科

黎克特制替換原則中,子類對父類的方法盡量不要重寫和過載。因為父類代表了定義好的結構,通過這個規範的介面與外界互動,子類不應該隨便破壞它。

3、依賴倒轉原則(dependence inversion principle) 

這個是開閉原則的基礎,具體內容:面向介面程式設計,依賴於抽象而不依賴於具體。寫**時用到具體類時,不與具體類互動,而與具體類的上層接**互。

4、介面隔離原則(inte***ce segregation principle) 

這個原則的意思是:每個介面中不存在子類用不到卻必須實現的方法,如果不然,就要將介面拆分。使用多個隔離的介面,比使用單個介面(多個介面方法集合到乙個的介面)要好。

5、迪公尺特法則(最少知道原則)(demeter principle) 

就是說:乙個類對自己依賴的類知道的越少越好。也就是說無論被依賴的類多麼複雜,都應該將邏輯封裝在方法的內部,通過public方法提供給外部。這樣當被依賴的類變化時,才能最小的影響該類。

最少知道原則的另乙個表達方式是:只與直接的朋友通訊。類之間只要有耦合關係,就叫朋友關係。耦合分為依賴、關聯、聚合、組合等。我們稱出現為成員變數、方法引數、方法返回值中的類為直接朋友。區域性變數、臨時變數則不是直接的朋友。我們要求陌生的類不要作為區域性變數出現在類中。

6、合成復用原則(composite reuse principle) 

原則是盡量首先使用合成/聚合的方式,而不是使用繼承。

總結 例如:賣房者、買房者、中介,設計模式對於我們而言相當於乙個中介。 

中介包羅永珍,可以有很多種組合方式,所以不同的設計模式代表這不同型別的中介,買房者和賣房者就可以有不同的選擇。

基礎的五種設計模式:單例、工廠、抽象工廠、建造者、原型

在選取設計模式的時候可以同時採用多種,例如我們建立多個選項的時候,可以使用工廠和建造者。工廠根據type來new不同的物件,也可以建造同一物件;建造者根據函式來build不同屬性的同一物件。個人覺得工廠的適用範圍更廣泛。

參考文章 

【設計模式】軟體模式起源與誕生 

23種設計模式全解析 

**: 

設計模式 起源

設計模式來自於建築領域,作為軟體工程的乙個分支。1995年gof gang of four四人組,erich gamma richard helm,ralph johnson和john vlissides 收集整理了23種設計模式出版了 設計模式 可復用物件導向軟體的基礎 一書。gof缺少了乙個較為...

UI設計起源及發展

使用者介面 ui 設計是多元化,多學科且富有創意的領域。良好的ui設計被日益視為增加使用者參與度和建立有用和視覺體驗的重要工具。對於那些想要進入ui設計領域的人來說,當然不乏需要學習的東西!下面胡老師和大家談談ui設計的起源及發展。1.什麼是使用者介面?使用者介面是應用程式,網頁或裝置上的人機互動 ...

中秋起源 月餅起源

中秋起源 中秋節是我國的傳統佳節。根據史籍的記載,中秋 一詞最早出現在 周禮 一書中。到魏晉時,有 諭尚書鎮牛淆,中秋夕與左右微服泛江 的記載。直到唐朝初年,中秋節才成為固定的節日。唐書 太宗記 記載有 八月十五中秋節 中秋節的盛行始於宋朝,至明清時,已與元旦齊名,成為我國的主要節日之一。這也是我國...