.NET 設計模式 思維導圖




關於.NET 設計模式 思維導圖

    背景說明

           以前都在匆匆忙忙寫程式碼,在無窮無盡的需求中間左衝右突,最近終於有一些閑暇的時間,來總結和思考編程中的一些核心思想,磨刀不誤砍柴的功夫,期望通過總結和學習,能夠在編程設計上能夠有更進一步的提升。

    回看設計模式

           這些設計模式,都來源於生活,都是將生活中一些實際場景,應用在編程當中,以解決編程當中遇到的不同問題,使得思路更容易理解、更方便閱讀。如果我們是一個對編程有想法、遇到過實際難題的人,我們或許也能設計出屬於自己的「設計模式」!

           還是先發個照,紀念一下歸納出23種設計模式的四位前輩。在 1994 年,由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 四人合著出版了一本名為 Design Patterns – Elements of Reusable Object-Oriented Software(中文譯名:設計模式 – 可復用的面向對象軟體元素) 的書,該書首次提到了軟體開發中設計模式的概念。四位作者合稱 GOF(四人幫,全拼 Gang of Four)。他們所提出的設計模式主要是基於以下的面向對象設計原則。

           ▣ 對介面編程而不是對實現編程。

           ▣ 優先使用對象組合而不是繼承。

           下面是25種設計模式的特徵、類型、應用場景等,之所以列出英文,因很多情況下,看到英文,就能聯想到自己見過的一些類:

  • 設計模式的分類

    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)

    應用場景:

    應用實例:

  • 思維導圖

    後記

  • 源碼下載及圖片出處說明

    Github .NET 源碼例子,會持續進行更新

           點此跳轉到Github

    類圖摘自於簡書作者Whyn的系列文章中。

    思維導圖是我自己所畫,轉載請註明出處。

  • 作者聲明

    文章主要是我自己學習設計模式的總結,也期望給正在學習的夥伴帶來幫助,不足之處,感謝留言指正。

    文章與源碼例子會持續於本文中和Github倉庫進行更新,僅此一篇,不會另寫系列文章。