.NET 設計模式 思維導圖
背景說明
以前都在匆匆忙忙寫程式碼,在無窮無盡的需求中間左衝右突,最近終於有一些閑暇的時間,來總結和思考編程中的一些核心思想,磨刀不誤砍柴的功夫,期望通過總結和學習,能夠在編程設計上能夠有更進一步的提升。
-
設計模式的分類
- 1.1.創建型設計模式
1.1.1.單例模式(Singleton Pattern)
特徵:
全局只有一個實例
必須自己創建自己的唯一實例
類型:
懶漢式
餓漢式
雙檢鎖
登記式1.1.2.工廠模式(Factory Pattern)
類型:
簡單工廠模式
工廠方法模式
抽象工廠模式
場景:
創建相似對象
角色
AbstractFactory:抽象工廠角色
ConcreteFactory:具體工廠角色
AbstractProduce:抽象產品角色
ConcreteProduce:具體產品角色
區別:用生產滑鼠作例子,試圖理解其區別
簡單工廠模式
產品清單:本廠專業生產羅技品牌的有線滑鼠、機械滑鼠,歡迎隨時預定
客戶需求:
客戶:我要羅技機械滑鼠
工廠:好的,我有現成的
三個月後…
客戶:我要羅技無線滑鼠
工廠:也可以,我先改造我的生產技術和設備先….
設備升級中…
工廠:好了,現在我能生產羅技品牌的有線滑鼠、機械滑鼠、無線滑鼠,有需要隨時找我
客戶:不好意思,我想再要一批羅技智慧滑鼠
工廠:……
工廠方法模式
產品清單:我們提供羅技滑鼠和雙飛燕滑鼠的專業生產能力,下屬兩個大廠,一個廠專門生產羅技滑鼠,一個廠專門生產雙飛燕滑鼠
客戶需求:
客戶:我要羅技滑鼠
我:好的,我讓羅技工廠做好後發貨給你
客戶:我要雙飛燕滑鼠
我:好的,我讓雙飛燕工廠馬上進行生產
客戶:我要雷蛇滑鼠
我:……好的,我先去貸款建個廠先…
抽象工廠模式
產品清單:我廠提供雙飛燕滑鼠、鍵盤等雙飛燕旗下產品的委託生產製造
客戶需求:
客戶:我要雙飛燕滑鼠
工廠:好的,我聯繫雙飛燕工廠,做完後發貨過來
客戶:我要雙飛燕鍵盤
工廠:好的,我聯繫雙飛燕工廠,做完後發貨過來
客戶:我要羅技音響
工廠:不好意思,我們暫時和羅技廠商那邊還沒有取得合作關係,不過我有雙飛燕生產的音響,您需要嗎?
客戶:不,我就要羅技音響….
工廠:額…我們後期也會考慮和羅技進行合作的
客戶:你們沒有辦法自己生產羅技音響嗎?
工廠:抱歉,我們只是抽象工廠,沒有實際的產能,只能聯繫實體工廠那邊進行生產的1.1.3.建造者模式(Builder Pattern)
類圖:
場景:創建複雜對象
角色:
Director:指揮者
Client:客戶端
ConcreteBuilder:建造者
Product:產品
實例:
比如StringBuilder,參考StringBuilder與建造者模式
有一些編譯器,也以Builder來命名,比如C++ Builder、PowerBuilder,由程式設計師指揮編譯器,經過複雜的過程,生成編譯文件。1.1.4.原型模式(Prototype Pattern)
類圖:
場景:
創建重複的對象,同時又能保證性能(安全執行 + 深度複製 + 快速回饋)
當直接創建對象的代價比較大時,則採用這種模式
角色:
客戶(Client):客戶類提出創建對象的請求。
抽象原型(Prototype):規定拷貝介面。
具體原型(Concrete Prototype):被拷貝的對象。- 1.2.結構型
1.2.1.適配器模式(Adapter Pattern)
場景:
實例:1.2.2.裝飾器模式(Decorator Pattern)
應用場景:
應用實例:1.2.3.代理模式(Proxy Pattern)
應用場景:
應用實例:1.2.4.外觀模式(Facade Pattern)
應用場景:
應用實例:1.2.5.橋接模式(Bridge Pattern)
應用場景:
應用實例:1.2.6.組合模式(Composite Pattern)
應用場景:
應用實例:1.2.7.享元模式(Flyweight Pattern)
應用場景:
應用實例:1.2.8.過濾器模式(Filter Pattern)
應用場景:
應用實例:- 1.3.行為型
1.3.1.策略模式(Strategy Pattern)
應用場景:
應用實例:1.3.2.模板模式(Template Pattern)
應用場景:
應用實例:1.3.3.觀察者模式(Observer Pattern)
應用場景:
應用實例:1.3.4.迭代器模式(Iterator Pattern)
應用場景:
應用實例:1.3.5.責任鏈模式(Chain of Responsibility Pattern)
應用場景:
應用實例:1.3.6.命令模式(Command Pattern)
應用場景:
應用實例:1.3.7.備忘錄模式(Memento Pattern)
應用場景:
應用實例:1.3.8.狀態模式(State Pattern)
應用場景:
應用實例:1.3.9.訪問者模式(Visitor Pattern)
應用場景:
應用實例:1.3.10.中介者模式(Mediator Pattern)
應用場景:
應用實例:1.3.11.解釋器模式(Interpreter Pattern)
應用場景:
應用實例:1.3.12.空對象模式(Null Object Pattern)
應用場景:
應用實例: -
思維導圖
回看設計模式
這些設計模式,都來源於生活,都是將生活中一些實際場景,應用在編程當中,以解決編程當中遇到的不同問題,使得思路更容易理解、更方便閱讀。如果我們是一個對編程有想法、遇到過實際難題的人,我們或許也能設計出屬於自己的「設計模式」!
還是先發個照,紀念一下歸納出23種設計模式的四位前輩。在 1994 年,由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 四人合著出版了一本名為 Design Patterns – Elements of Reusable Object-Oriented Software(中文譯名:設計模式 – 可復用的面向對象軟體元素) 的書,該書首次提到了軟體開發中設計模式的概念。四位作者合稱 GOF(四人幫,全拼 Gang of Four)。他們所提出的設計模式主要是基於以下的面向對象設計原則。
▣ 對介面編程而不是對實現編程。
▣ 優先使用對象組合而不是繼承。
下面是25種設計模式的特徵、類型、應用場景等,之所以列出英文,因很多情況下,看到英文,就能聯想到自己見過的一些類:
-
源碼下載及圖片出處說明
Github .NET 源碼例子,會持續進行更新
類圖摘自於簡書作者Whyn的系列文章中。
思維導圖是我自己所畫,轉載請註明出處。
-
作者聲明
文章主要是我自己學習設計模式的總結,也期望給正在學習的夥伴帶來幫助,不足之處,感謝留言指正。
文章與源碼例子會持續於本文中和Github倉庫進行更新,僅此一篇,不會另寫系列文章。
後記