在軟體工程中,設計模式(design pattern)是對軟體設計中普遍存在(反覆出現)的各種問題,所提出的解決方案。這個術語是由埃里希·伽瑪(erich gamma)等人在2023年代從建築設計領域引入到電腦科學的
設計模式並不直接用來完成**的編寫,而是描述在各種不同情況下,要怎麼解決問題的一種方案。物件導向設計模式通常以類別或物件來描述其中的關係和相互作用,但不涉及用來完成應用程式的特定類別或物件。設計模式能使不穩定依賴於相對穩定、具體依賴於相對抽象,避免會引起麻煩的緊耦合,以增強軟體設計面對並適應變化的能力
並非所有的軟體模式都是設計模式,設計模式特指軟體「設計」層次上的問題。還有其他非設計模式的模式,如架構模式。同時,演算法不能算是一種設計模式,因為演算法主要是用來解決計算上的問題,而非設計上的問題
歷史發展:
肯特·貝克和沃德·坎寧安在2023年,利用克里斯托佛·亞歷山卓在建築設計領域裡的思想開發了設計模式並把此思想應用在smalltalk中的圖形使用者介面(gui)的生成中。一年後埃里希·伽瑪在他的蘇黎世大學博士畢業**中開始嘗試把這種思想改寫為適用於軟體開發。與此同時james coplien 在2023年至2023年也在利用相同的思想致力於c++的開發,而後於2023年發表了他的著作advanced c++ programming styles and idioms。同年erich gamma 得到了博士學位,然後去了美國,在那與richard helm, ralph johnson ,john vlissides 合作出版了《設計模式:可復用物件導向軟體的基礎》(design patterns - elements of reusable object-oriented software) 一書,在此書中共收錄了 23 種設計模式
這四位作者在軟體開發領域裡以「四人幫」(英語,gang of four,簡稱gof)而聞名,並且他們在此書中的協作導致了軟體設計模式的突破。有時,gof也會用於代指《設計模式》這本書
表述乙個軟體設計模式的格式根據作者的不同,劃分和名稱等都會有所不同。常用的gof描述模式的格式大致分為以下這些部分:
《設計模式》一書原先把設計模式分為建立型模式、結構型模式、行為型模式,把它們通過授權、聚合、診斷的概念來描述
對擴充套件開放,對修改關閉
通過抽象使各個類或者模組不相互影響,實現松耦合
乙個類、介面、方法只做一件事
盡量保證介面的純潔性,客戶端不應該依賴不需要的介面
又叫最少知道原則,乙個類對其所依賴的類知道得越少越好
子類可以擴充套件父類的功能但不能改變父類原有的功能
盡量使用物件組合、聚合,而不使用繼承關係達到**復用的目的
工廠方法模式(factory pattern)、抽象工廠模式(abstract factory pattern)、單例模式(singleton pattern)、建造者模式(builder pattern)、原型模式(prototype pattern)
介面卡模式(adapter pattern)、裝飾器模式(decorator pattern)、**模式(proxy pattern)、外觀模式(facade pattern)、橋接模式(bridge pattern)、組合模式(composite pattern)、享元模式(flyweight pattern)
策略模式(strategt pattern)、模板方法模式(template pattern)、觀察者模式(observer pattern)、迭代子模式(iterative pattern)、責任鏈模式(chain of responsibility pattern)、命令模式(command pattern)、備忘錄模式(memo pattern)、狀態模式(state pattern)、訪問者模式(visitor pattern)、中介者模式(mediator pattern)、直譯器模式(interpreter pattern)
設計模式 設計模式簡介
本次系列的文章摘自 設計模式 可復用物件導向軟體工程的基礎 erich gamma 等著,李英軍 等 譯 本文只是對設計模式做乙個簡單的介紹。設計模式一樣而言,有四個基本要素 1 設計模式 2 問題 3 解決方案 4 效果。設計模式是對被用來在特定的場景下解決一般設計問題的類和相互通訊的物件的描述。...
設計模式簡介
設計模式 design pattern 是一套被反覆使用 多數人知曉的 經過分類編目的 設計經驗的總結。設計模式是軟體工程 的基石脈絡,如同大廈 的結構一樣。模式名稱 pattern name 問題 problem 解決方案 solution 效果 consequences 設計模式分為三種型別,共...
設計模式簡介
1.裝飾模式 顧名思義,裝飾模式就是給乙個物件增加一些新得功能,而且是動態的,要求裝飾物件和被裝飾物件實現同乙個介面,且裝飾物件中持有被裝飾物件的乙個例項.2.觀察者模式 簡單來說,當乙個物件變化時,其他依賴該物件的物件都會收到通知,並且隨著變化 物件之間是一種一對多的關係.3.工廠模式 客戶端需要...