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


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

本文自2021年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)>> 手寫自定義迭代器,秒懂迭代器底層原理 2021/11/15已更新
Tom彈架構:命令模式(Command Pattern)>> 使用命令模式重構播放器控制條 2021/11/22已更新
Tom彈架構:狀態模式(State Pattern)>> 徹底搞懂Spring狀態機原理,實現訂單與物流解耦 2021/11/16已更新
Tom彈架構:備忘錄模式(Memento Pattern)>> 100行代碼,輕松搞定文本編輯器中草稿箱 2021/11/23已更新
Tom彈架構:中介者模式(Mediator Pattern)>> 微信和QQ這么多群,該如何管理好友關系? 2021/11/23已更新
Tom彈架構:解釋器模式(Interpreter Pattern)>> 這個無敵設計,可以解析並運算任意數學表達式 2021/11/18已更新
Tom彈架構:觀察者模式(Observer Pattern)>> 基於Guava API實現異步通知和事件回調 2021/11/17已更新
Tom彈架構:訪問者模式(Visitor Pattern) 2021/11/24已更新

7 新設計模式

標題 備注
Tom彈架構:對象池模式(Object Pool Pattern) 2021/11/25已更新
Tom彈架構:規格模式(Specification Pattern) 2021/11/25已更新
Tom彈架構:空對象模式(Null Object Pattern) 2021/11/25已更新
Tom彈架構:雇工模式(Employee Pattern) 2021/11/25已更新

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彈架構 』可獲取更多技術干貨!


免責聲明!

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



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