首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

23 種設計模式通俗講解:用追 MM 的故事記住創建型、結構型、行為型模式

     編輯:Java 相關知識

創建型模式(5 種)—— 怎麼 new 對象

1. 簡單工廠(Factory)

麥當勞、肯德基都賣雞翅,你只管說「來四個雞翅」,不用管哪家廚房做的。工廠類封裝創建邏輯,客戶端解耦具體產品類。缺點:新增產品需修改工廠類(違背開閉原則)。

2. 建造者模式

多語言翻譯機:按鍵說「我愛你」,內部組裝語法、語調、語氣。將複雜對象構建過程與表示分離,同一構建流程可產生不同表示。適用:參數多、構建步驟固定、需不可變對象。

3. 工廠方法

帶 MM 點漢堡,具什麼口味讓她自己跟服務員說。核心工廠定義接口,子類決定實例化哪個具體類。符合開閉原則,新增產品只加類不改舊代碼。

4. 原型模式

收集情話庫,用時 Copy 一份發給 MM。通過克隆現有對象創建新對象,避免 new 開銷。需實現 Cloneable,注意深/淺拷貝。

5. 單例模式

六老婆共一老公,喊「老公」指的都是我。全局唯一實例,自行創建並提供訪問點。雙重檢查鎖、靜態內部類、枚舉實現;僅在真正需要「單一實例」時使用。

結構型模式(7 種)—— 類/對象如何組合

6. 適配器

不懂粵語的我、不懂普通話的港妹,Kent 做翻譯。將一個接口轉換為客戶期望的另一接口,使不兼容類能協作。對象適配器(組合)優於類適配器(繼承)。

7. 橋接模式

問候語(早/晚安)× 讚美維度(衣服/髮型)= 組合爆炸。將抽象與實現解耦,兩者可獨立擴展。用組合/聚合替代繼承。

8. 組合模式

MM 生日買 T恤+裙子+包包 = 一套禮物。樹形結構表達「整體-部分」層次,客戶端統一對待單個對象和組合對象。文件系統、菜單樹典型場景。

9. 裝飾器

相框裝照片、盒子裝相框、紙盒裝盒子。動態給對象添加職責,比繼承更靈活。Java I/O 流(BufferedReader(new FileReader(...)))經典應用。

10. 外觀模式

專業相機有自動檔,MM 只需按快門。為子系統提供統一高層接口,降低使用複雜度。通常結合單例,每個子系統一個外觀類。

11. 享元模式

手機存常用語,發短信只加 MM 名字。共享細粒度對象,區分內部狀態(不變)與外部狀態(變),大幅減少對象數量。字符、圖標、連接池對象適用。

12. 代理模式

聊天機器人自動回「hi/你好/多大」,其他轉人工。為對象提供代理控制訪問,可延遲加載、權限控制、遠程調用。靜態/動態代理(JDK/CGLIB)、虛擬/保護/遠程代理。

行為型模式(11 種)—— 對象間如何交互、職責分配

13. 責任鏈

傳紙條「願意做女友請留下,不願意向前傳」,傳到老師手裡終結。請求沿鏈路傳遞,直到某節點處理。動態組織職責,解耦發送者與接收者。

14. 命令模式

MM 寫紙條讓弟弟送命令給我。將請求封裝為對象,支持撤銷、排隊、日誌、事務。發送者不關心接收者接口及執行細節。

15. 解釋器

《泡MM真經》腳本,按步驟執行。定義語言文法並提供解釋器,處理特定領域語言(DSL)。正則引擎、SQL 解析器、表達式計算器。

16. 迭代器

MM 提條件清單,我一條條滿足。順序訪問聚合對象元素,不暴露內部結構。Java Iterator、Iterable、for-each 語法糖。

17. 中介者

四人打麻將我算錢,贏了發錢、輸了收錢。封裝對象間交互,將多對多轉為一對多,降低耦合。MVC 中 Controller 即中介者。

18. 備忘錄

同時聊多個 MM,備忘錄記錄每個聊天進度。捕獲對象內部狀態並在不破壞封裝下外部化存儲,支持撤銷/恢復。編輯器撤銷、棋類遊戲悔棋。

19. 觀察者

訂閱公司 MM 情報郵件組,新情報自動推送。定義一對多依賴,主題狀態變化自動通知所有觀察者。事件總線、Listener、RxJava、Spring 事件。

20. 狀態模式

MM 對你無感/一般/喜歡三種狀態,約電影反應完全不同。對象內部狀態改變時行為隨之改變,像換了類一樣。將狀態相關行為封裝到狀態類,Context 委派給當前狀態。

21. 策略模式

不同類型 MM 用不同策略:請吃飯/看電影/海邊散步。定義算法族,封裝每個算法,使其可互換。支付方式、排序算法、壓縮策略。

22. 模板方法

《如何說服女生上床》八步曲固定,每步具體做法因人而異。父類定義算法骨架,子類實現細節步驟。框架設計核心模式(Spring JdbcTemplate、Servlet doGet/doPost)。

23. 訪問者

情人節送花送卡,找花店老板、禮品店老板按 MM 特點選。將操作從對象結構分離,新增操作無需修改結構類。編譯器 AST 遍歷、報表導出、對象結構多樣操作。

如何選型?

無銀彈。理解問題本質:創建還是組織還是行為?耦合點在哪?變化維度何在?原則優於模式:單一職責、開閉、里氏替換、接口隔離、依賴倒轉。模式是前人總結的「最佳實踐詞彙」,用共同語言溝通設計意圖,而非生搬硬套。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved