.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倉庫進行更新,僅此一篇,不會另寫系列文章。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM