復用 設計模式 反模式 分析模式

2021-08-22 17:34:17 字數 2544 閱讀 8561

1987

年,smalltalk

社群的ward cunningham

和kent beck

發表了一篇文章《

using pattern languages for object-oriented programs

》這標誌著建築大師的思想落戶軟體開發領域。

設計模式的起源是建築師

christopher alexander

的研究,不同時代建築師留下的偉大建築作品中,有很多重複出現的設計,於是,他找到了一種結構化、可重用的方法來捕捉並描述這些重複的設計,

還給這些描述的結果起了乙個名字叫模式(

pattern)。

「每乙個模式描述了乙個在人們周圍不斷重**生的問題,以及該問題的解決方案的核心。這樣,你就能不斷地使用該方案而不必做重複勞動。」軟體開發者最討厭的東西也許就是重複,於是軟體開發者很容易接受了這個思想。這裡說一點題外話,中國的建築史從來不以復用為目標的,中國至今沒有一本像樣的古代建築史,是因為建築師往往要突破舊例,而這些知識卻往往是獨佔的。所以樣式雷家族的建築圖譜遺失之後,故宮的建築能拆開但是裝不上去。

建築大師用四個重要部分來描述乙個模式:

這種描述方式也被借鑑到了軟體開發領域,我們現在看到的設計模式的描述中,也都按照這樣的格式來刻畫某乙個設計模式的關鍵特徵。我們知道

對於具體事物的描述大體上可分為兩種。一種是對事物的屬性進行度量,屬於定量的表示方法。另一種則是對事務所包含的成分進行分析,稱為定性的描述或結構性描述。

顯然這種方式還是定性分析。

這裡就有乙個有趣的問題了,設計模式的定義是定性的。

讓機器辨別事物的最基本方法是計算,原則上講是對計算機要分析的事物與作為標準的稱之為「模板」的相似程度進行計算。

所以現在很多人研究設計模式自動選擇時,第一件事情就是把設計模式進行量化描述。而在這種研究沒有成功之前,分析、描述、判斷還是人的強項,設計模式也體現了乙個開發人員的價值。

1995

年,erich gamma

、richard helm

、ralph

johnson

和john vlissides

發表了著名的《

design patterns

:elements of reusable

object-oriented software

》,這本書成為了設計模式的經典之作,這四位也被稱為

gof.

設計模式復用的是物件導向設計知識和經驗,它是用模板描述的,在設計階段廣泛使用。設計模式的關注者主要是設計師

開發人員。物件導向技術的日益成熟使其可操作性很強,通過學習物件導向的設計原則和設計模式的描述模板開發人員可以逐漸將設計模式應用到自己的設計過程中。

1996

年,michael akroyd

發表了「

antipatterns

:vaccinations

against object misuse

」的**,提出了反模式(

anti patterns

)的概念,反模式標識了導致軟體質量低劣和專案失敗的不好的設計概念、技術途徑和開發實踐,並提出了軟體重組方案。現在我桌面上有《反模式:危機中軟體、架構和專案的重構》,反模式方面的資料相對設計模式太少,這本

200多頁的小冊子也成了反模式的經典。

設計模式的組織思路是集中以往的優秀軟體的設計經驗,它的思路可以簡單的表達為:站在巨人的肩膀上。而反模式的思路則是:失敗是成功之母。反模式復用的是軟體開發失敗的知識和經驗,它適用的場景跨越整個軟體開發過程。因而無論是開發者、設計師還是軟體開發的管理者都可以從反模式中獲益。基於對軟體開發最常見慘痛教訓的總結,這種實踐特徵也讓反模式具有較強的可操作性。反模式的也是像設計模式一樣用模板來描述,它會包含反模式名稱、根源、以及重構方案等組成部分。

1996

年,martin fowler

的《analysis pattern

:reusable object

models

》一書提出了分析模式的概念。去年年底我翻譯了

martin fowler

的一篇經典文章《新方**》,隨即發現這位大師在好多領域都是領先者比如

ioc,比如分析模式

analysis pattern

經常在martin fowler

的**上轉悠收穫不少。

復用的最高境界是什麼

?是需求的復用。

ooa中可復用的分析知識和經驗是分析模式復用的內容。分析模式著眼於軟體的分析和藍圖規劃階段,它不是從計算機系統的角度來看問題而是從領域工程的角度,反映的是業務過程的概念抽象而不是軟體實現。所以分析模式是使用物件導向的思維方式來幫助領域專家,分析師來認識問題的,它是高度抽象的。高度抽象同時意味著它在實踐中的可操作性比較差,曲高和寡,向來如此。

做為乙個開發者,從最簡單的**復用開始,堅持不懈的學習設計模式,並借力設計模式將煙囪型的系統變成乙個可擴充套件的健壯的系統。這個過程是漫長的,艱難的,要走好多的彎路,但是追求更好的設計是大部分開發者的共同點。

這個磨礪過程之後才有開發過程中的舉重若輕,這讓我想到黃庭堅的詩句:「桃李春風一杯酒,夜雨江南十年燈」,繼續吧

… ...

設計模式分析 組合模式

對於樹形結構,當容器物件 如資料夾 的某乙個方法被呼叫時,將遍歷整個樹形結構,尋找也包含這個方法的成員物件 可以是容器物件,也可以是葉子物件,如子資料夾和檔案 並呼叫執行。遞迴呼叫 由於容器物件和葉子物件在功能上的區別,在使用這些物件的客戶端 中必須有區別地對待容器物件和葉子物件,而實際上大多數情況...

面向復用的設計模式(結構模式和行為模式)

結構模式 介面卡模式 用於匹配不協調的介面的類。裝飾模式 動態地向乙個類中的乙個存在的物件新增或重寫新的行為。門面模式 為一堆龐大的 提供乙個簡化的介面。行為模式 策略模式 舉個例子,動物的叫聲,貓和狗和其他動物的叫聲都不一樣,讓系統根據物件的差別來正確地發出叫聲就是策略模式。模板模式 一些共性的行...

設計模式分析 建立型模式之工廠模式

在軟體開發中,當我們會用到大量的建立某種物件時,就會使用工廠模式。我們現在提出乙個需求,乙個披薩店,分為希臘披薩和乳酪披薩,完成訂購披薩的功能。傳統解決方案 僅展示orderpizza 如上述 就暴露了傳統模式的缺陷,當有大量物件的時候,並且建立pizza的物件好多功能都需要用到 此題功能較少,意思...