1個月連載30個設計模式真實案例,挑戰年薪60W不是夢

Tom彈架構發表於2021-11-13

本文所有內容均節選自《設計模式就該這樣學》

本文自2012年10月29日起持續連載,請大家持續關注....

序言

Design Patterns: Elements of Reusable Object-Oriented Software(以下簡稱《設計模式》),一書由Erich Gamma、Richard Helm、Ralph Johnson和John Vlissides合著(Addison-Wesley,1995)。這四位作者常被稱為“四人組(Gang of Four)”,而這本書也就被稱為“四人組(或 GoF)”書。他們首次給我們總結出一套軟體開發可以反覆使用的經驗,幫助我們提高程式碼的可重用性、系統的可維護性等,解決軟體開發中的複雜問題。

設計模式已誕生20多年,其間相繼出版的關於設計模式的經典著作不計其數。如果說GoF的《設計模式》是設計模式領域的“聖經”,那麼之後出版的各種關於設計模式的書籍可稱為“聖經”的“批註版”或者“白話版”。本書正是基於GoF的《設計模式》來編寫的。

《設計模式》總結的是經驗之談,千萬不要死記硬背,生搬硬套。下面來總體預覽一下設計模式的分類和總結,如下表所示。

分 類 解 釋 舉 例
建立型設計模式(Creational) 這類設計模式提供了一種在建立物件的同時隱藏建立邏輯的方式,而不是使用新的運算子直接例項化物件,這使得程式在判斷針對某個給定例項需要建立哪些物件時更加靈活 工廠方法模式(Factory Method Pattern)抽象工廠模式(Abstract Factory Pattern)單例模式(Singleton Pattern)原型模式(Prototype Pattern)建造者模式(Builder Pattern)
結構型設計模式(Structural) 這類設計模式關注類和物件的組合。繼承的概念被用來組合介面和定義組合物件獲得新功能的方式 代理模式(Proxy Pattern)門面模式(Facade Pattern)裝飾器模式(Decorator Pattern)享元模式(Flyweight Pattern)組合模式(Composite Pattern)介面卡模式(Adapter Pattern)橋接模式(Bridge Pattern)
行為型設計模式(Behavioral) 這類設計模式特別關注物件之間的通訊 模板方法模式(Template Method Pattern)策略模式(Strategy Pattern)責任鏈模式(Chain of Responsibility Pattern)、迭代器模式(Iterator Pattern)、命令模式(Command Pattern)、狀態模式(State Pattern)、備忘錄模式(Memento Pattern)、中介者模式(Mediator Pattern)、直譯器模式(Interpreter Pattern)、觀察者模式(Observer Pattern)、訪問者模式(Visitor Pattern)

本文是我對“聖經”實踐的精華總結,全文內容節選自《設計模式就該這樣學》,這是一本可以真正能夠落地的“設計模式”之書,也是目前唯一一本結合框架原始碼如何落地“設計模式”這個角度來理解設計模式的書。本文也將會結合JDK、Spring、MyBatis、Tomcat、Netty等經典框架原始碼展開對設計模式的分析。當然,本文還會結合我多年的“踩坑填坑”經驗和“教學答疑”經驗,用比“聖經”更深刻、更全面、更通俗、更生動、更有趣、更接地氣的方式並且結合真實業務場景分析每種設計模式的優缺點,治癒“設計模式選擇困難症”。選設計模式就像相親選物件,一旦做好了接受TA缺點的準備,那TA就一定屬於你。所以,本文對於日常開發而言更具有指導意義。

Tom彈架構,只彈乾貨不摻水,本文所有分享內容均從實戰角度出發,不談概念,只談實戰和應用落地

1 各種設計模式使用頻率總結

以下是根據本人的個人經驗,對設計模式使用頻率的總結,不可作為學術依據,僅供大家參考。因為設計模式的選擇還是要依賴具體的業務場景的,每個人接觸的業務領域都不一樣,自然設計模式的選擇也會不一樣。

1.1 建立型設計模式

如下圖所示,建立型設計模式中使用頻率由高到低依次為工廠方法模式、抽象工廠模式、建造者模式、單例模式、原型模式。原型模式一般都有現成的工具類,自己造輪子的情況比較少。

1.2 結構型設計模式

如下圖所示,結構型設計模式中使用頻率由高到低依次為介面卡模式、裝飾器模式、代理模式、門面模式、組合模式、享元模式、橋接模式。其中橋接模式一般都有現成的工具類,自己造輪子的情況比較少。

1.3 行為型設計模式

如下圖所示,行為型設計模式中使用頻率由高到低依次為策略模式、觀察者模式、責任鏈模式、直譯器模式、模板方法模式、迭代器模式、中介者模式、命令模式、訪問者模式、備忘錄模式、狀態模式。其中,觀察者模式、直譯器模式、迭代器模式、中介者模式、命令模式、訪問者模式、備忘錄模式一般都有現成的工具類,自己造輪子的情況比較少。

下面根據本人多年研究設計模式的經驗總結,將壓箱乾貨首次全網釋出。如果本文對您有幫助一定要收藏,也歡迎關注和點贊;如果您有任何建議也可留言評論或私信,您的支援是我堅持創作的動力。關注『 Tom彈架構 』可獲取更多技術乾貨!

2 為什麼一定要學習設計模式

標題 備註
Tom彈架構:為什麼一定要學習設計模式 2021/10/29已更新

3 七大架構設計原則篇

標題 備註
Tom彈架構:開閉原則(Open-Closed Principle,OCP) 2021/10/21已更新
Tom彈架構:依賴倒置原則(Dependence Inversion Principle,DIP) 2021/10/22已更新
Tom彈架構:單一職責原則(Simple Responsibility Principle,SRP) 2021/10/23已更新
Tom彈架構:介面隔離原則(Interface Segregation Principle,ISP) 2021/10/24已更新
Tom彈架構:迪米特法則(Law of Demeter,LoD) 2021/10/25已更新
Tom彈架構:里氏替換原則(Liskov Substitution Principle,LSP) 2021/10/26已更新
Tom彈架構:合成複用原則(Composite/Aggregate Reuse Principle,CARP) 2021/10/27已更新

目錄僅代表更新計劃,因精力分配原因不一定按順序目錄順序連載,計劃1個月(即2021年11月31日前)連載完畢,請小夥伴們持續關注本文更新,大家可以先關注和收藏本文或者關注『 Tom彈架構 』更新通知,感謝您的支援!

4 建立型設計模式

標題 備註
Tom彈架構:簡單工廠模式(Simple Factory Pattern) >> 徹底說透簡單工廠那些你沒有關注過的細節 2021/11/10已更新
Tom彈架構:工廠方法模式(Factory Method Pattern)>> 全面通透深入剖析工廠方法模式 2021/11/11已更新
Tom彈架構:抽象工廠模式(Abstract Factory Pattern)>> 手寫資料庫連線池,讓抽象工廠不再抽象 2021/11/12已更新
Tom彈架構:單例模式(Singleton Pattern)>> 這9個單例被破壞的事故現場,你遇到過幾個? 2021/10/26已更新
Tom彈架構:原型模式(Prototype Pattern)>> 一文讀懂深克隆與淺克隆的關係 2021/11/02已更新
Tom彈架構:建造者模式(Builder Pattern)>> 用建造者模式實現一個防SQL隱碼攻擊的ORM框架 2021/10/26已更新

5 結構型設計模式

標題 備註
Tom彈架構:代理模式(Proxy Pattern)>> 從沒有人將代理模式分析得如此透徹 2021/10/27已更新
Tom彈架構:門面模式(Facade Pattern)>> 原來你不知道自己每天都在用門面模式 2021/11/13已更新
Tom彈架構:裝飾器模式(Decorator Pattern)>> 趣談裝飾器模式,讓你一輩子不會忘 2021/11/01已更新
Tom彈架構:享元模式(Flyweight Pattern)>> 就因為把int改成Integer,第2天被辭了 2021/11/01已更新
Tom彈架構:組合模式(Composite Pattern)>> 沒有效能瓶頸的無限級選單樹應該這樣設計 2021/11/04已更新
Tom彈架構:介面卡模式(Adapter Pattern)>> 如何快速搞定第三方登入且易擴充套件? 2021/11/03已更新
Tom彈架構:橋接模式(Bridge Pattern)>> 使用橋接模式設計複雜的訊息系統 2011/11/08已更新

6 行為型設計模式

標題 備註
Tom彈架構:委派模式(Delegate Pattern)>> 你以為委派模式很神祕,其實你每天都在用 2021/11/09已更新
Tom彈架構:模板方法模式(Template Method Pattern)>> 搞懂鉤子方法和模板方法,看完這篇就夠了 2021/11/07已更新
Tom彈架構:策略模式(Strategy Pattern)>> 使用策略模式重構電商折扣和支付場景 2021/11/05已更新
Tom彈架構:責任鏈模式(Chain of Responsibility Pattern)>> 這才是責任鏈模式的優雅使用方式 2021/10/27已更新
Tom彈架構:迭代器模式(Iterator Pattern) 待更新...
Tom彈架構:命令模式(Command Pattern) 待更新...
Tom彈架構:狀態模式(State Pattern) 待更新...
Tom彈架構:備忘錄模式(Memento Pattern) 待更新...
Tom彈架構:中介者模式(Mediator Pattern) 待更新...
Tom彈架構:直譯器模式(Interpreter Pattern) 待更新...
Tom彈架構:觀察者模式(Observer Pattern) 待更新...
Tom彈架構:訪問者模式(Visitor Pattern) 待更新...

7 新設計模式

標題 備註
Tom彈架構:物件池模式(Object Pool Pattern) 待更新...
Tom彈架構:規格模式(Specification Pattern) 待更新...
Tom彈架構:空物件模式(Null Object Pattern) 待更新...
Tom彈架構:僱工模式(Employee Pattern) 待更新...

8 一句話歸納設計模式

各種設計模式對比及程式設計思想總結如下表所示。

設計模式 一句話歸納 目 的 生活案例 框架原始碼舉例
工廠模式(Factory Pattern) 產品標準化,
生產更高效
封裝建立細節 實體工廠 LoggerFactory、Calender
單例模式(Singleton Pattern) 世上只有一個我 保證獨一無二 CEO BeanFactory、Runtime
原型模式(Prototype Pattern) 拔一根猴毛,
吹出千萬個
高效建立物件 克隆 ArrayList、PrototypeBean
建造者模式(Builder Pattern) 高配中配與低配,
想選哪配就哪配
開放個性配置步驟 選配 StringBuilder、
BeanDefinitionBuilder
代理模式(Proxy Pattern) 沒有資源沒時間,
得找媒婆來幫忙
增強職責 媒婆 ProxyFactoryBean、
JdkDynamicAopProxy、CglibAopProxy
門面模式(Facade Pattern) 開啟一扇門,
通向全世界
統一訪問入口 前臺 JdbcUtils、RequestFacade
裝飾器模式(Decorator Pattern) 他大舅他二舅,
都是他舅
靈活擴充套件、
同宗同源
煎餅 BufferedReader、InputStream
享元模式(Flyweight Pattern) 優化資源配置,
減少重複浪費
共享資源池 全國社保聯網 String、Integer、ObjectPool
組合模式(Composite Pattern) 人在一起叫團伙,
心在一起叫團隊
統一整體和個體 組織架構樹 HashMap、SqlNode
介面卡模式(Adapter Pattern) 萬能充電器 相容轉換 電源適配 AdvisorAdapter、HandlerAdapter
橋接模式(Bridge Pattern) 約定優於配置 不允許用繼承 DriverManager
委派模式(Delegate Pattern) 這個需求很簡單,
怎麼實現我不管
只對結果負責 授權委託書 ClassLoader、
BeanDefinitionParserDelegate
模板模式(Template Pattern) 流程全部標準化,
需要微調請覆蓋
邏輯複用 把大象裝進冰箱 JdbcTemplate、HttpServlet
策略模式(Strategy Pattern) 條條大道通北京,
具體哪條你來定
把選擇權交給使用者 選擇支付方式 Comparator、
InstantiationStrategy
責任鏈模式(Chain of Responsibility Pattern) 各人自掃門前雪,
莫管他人瓦上霜
解耦處理邏輯 踢皮球 FilterChain、Pipeline
迭代器模式(Iterator Pattern) 流水線上坐一天,
每個包裹掃一遍
統一對集合的訪問方式 逐個檢票進站 Iterator
命令模式(Command Pattern) 運籌帷幄之中,
決勝千里之外
解耦請求和處理 遙控器 Runnable、TestCase
狀態模式(State Pattern) 狀態驅動行為,
行為決定狀態
繫結狀態和行為 訂單狀態跟蹤 Lifecycle
備忘錄(Memento Pattern) 失足不成千古恨,
想重來時就重來
備份,後悔機制 草稿箱 StateManageableMessageContext
中介者(Mediator Pattern) 聯絡方式我給你,
怎麼搞定我不管
統一管理網狀資源 朋友圈 Timer
直譯器模式(Interpreter Pattern 我想說“方言”,
一切解釋權歸我
實現特定語法解析 摩斯密碼 Pattern、ExpressionParser
觀察者模式(Observer Pattern) 到點就通知我 解耦觀察者與被觀察者 鬧鐘 ContextLoaderListener
訪問者模式(Visitor Pattern) 橫看成嶺側成峰,
遠近高低各不同
解耦資料結構和資料操作 KPI考核 FileVisitor、BeanDefinitionVisitor

在《設計模式就該這樣學》一書中,還有大量的UML圖及易混淆的設計模式對比案例分析,也歡迎大家關注。

在日常應用中,設計模式從來都不是單個設計模式獨立使用的。在實際應用中,通常多個設計模式混合使用,你中有我,我中有你。下圖完整地描述了設計模式之間的混用關係,希望對大家有所幫助。

本文計劃1個月(即2021年11月30日前)連載完畢,請小夥伴們持續關注本文更新,大家可以先關注和收藏本文,感謝您的支援! 關注微信公眾號『 Tom彈架構 』回覆“設計模式”可獲取完整原始碼。 下一個連載專題預告《Spring核心原理與原始碼分析》。

本文為“Tom彈架構”原創,轉載請註明出處。技術在於分享,我分享我快樂!
如果本文對您有幫助,歡迎關注和點贊;如果您有任何建議也可留言評論或私信,您的支援是我堅持創作的動力。關注微信公眾號『 Tom彈架構 』可獲取更多技術乾貨!

相關文章