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

23 種設計模式趣味通識:用追 MM 故事秒懂創建型、結構型、行為型模式核心思想

     編輯:Java 綜合教學

前言

設計模式不是死記硬背的類圖,而是**解決特定問題的經驗方案**。本文用「追 MM」系列故事,將 23 種模式核心意圖**一句話串起**,助你建立直觀心智模型,面試、架構設計信手拈來。

創建型模式(5 種):解決「如何優雅地創建對象」

模式核心意圖追 MM 故事關鍵詞
工廠方法定義創建接口,子類決定實例化哪類帶 MM 吃漢堡,**MM 自己跟服務員說要什麼口味**,我不操心細節解耦、多態創建
抽象工廠創建相關/依賴對象族,無需指定具體類全套約會套餐:**麥當勞全家桶** 或 **肯德基全家桶**,風格統一不可混搭產品族、一致性
建造者分步構建複雜對象,分離構建與表示多語言翻譯機:**按鍵組合**說出「我愛你」,同一過程產出不同語言分步驟、靈活組合
原型複製現有對象創建新對象,避免重複初始化肉麻情話 **複製貼上**發給不同 MM,改個名字即可克隆、性能優化
單例全局唯一實例,受控訪問點**老公只有一個**,六個老婆喊「老公」指向同一人全局唯一、懶漢/餓漢

結構型模式(7 種):解決「類與對象如何組合成更大結構」

模式核心意圖追 MM 故事關鍵詞
適配器將接口轉換為客戶期望的另一接口不會說粵語,**Kent 充當翻譯**讓我和 Sarah 溝通接口轉換、兼容舊代碼
橋接抽象與實現分離,雙向獨立擴展問候語(早/晚)× 讚美語(衣服/髮型) **自由組合**,不綁死組合替代繼承、雙維度變化
組合樹形結構表達「整體-部分」,統一對待生日禮物:**T恤+裙子+包包 = 一套**,整體打包送出樹形、遞歸、統一介面
裝飾器動態給對象添加職責,替代繼承照片 → **相框 → 禮盒 → 包裝紙**,層層包裝核心不變動態增強、疊加、透明
外觀為子系統提供統一高層入口專業相機**自動檔**一鍵拍照,隱藏光圈/快門/ISO 細節簡化接口、降低耦合
享元共享細粒度對象,區分內部/外部狀態常用語句**存手機短語**,發時加上 MM 名字,不重複輸入共享池、內外狀態分離
代理為對象提供代理,控制訪問聊天機器人**自動回覆**「嗨/多大/身高」,其餘轉人工訪問控制、延遲加載、AOP

行為型模式(11 種):解決「對象間如何通信、職責分配、算法封裝」

模式核心意圖追 MM 故事關鍵詞
責任鏈請求沿鏈路傳遞,直到被處理表白紙條**一排傳遞**,誰願意誰處理,傳到老師手裡完蛋解耦發送者接收者、動態鏈
命令將請求封裝為對象,支援撤銷/排隊/日誌MM 寫**紙條指令**給弟弟送達,我執行,弟弟是命令對象封裝請求、解耦調用者執行者
解釋器定義語言文法並提供解釋器《泡 MM 真經》**腳本化**,約會按步驟執行:巧遇→破冰→追求→接吻...DSL、文法樹、解釋執行
迭代器順序訪問聚合對象,不暴露內部結構MM 提出**清單條件**:鑽石→別墅→50cm... 我逐項滿足/拒絕統一遍歷介面、多種遍歷方式
中介者封裝對象交互,降低耦合四個 MM 打麻將**我當莊家算錢**,輸贏只跟我結算集中控制、N:M 變 1:N
備忘錄捕獲對象內部狀態,外部化存儲,支援撤銷同時聊幾個 MM,**備忘錄記錄**跟誰說了什麼,防翻車狀態快照、封裝性、撤銷
觀察者定義一對多依賴,狀態變化自動通知加入 **MM 情報郵件組**,Tom 發布情報,我們自動收到發布-訂閱、鬆耦合、事件驅動
狀態對象內部狀態改變行為,如換類約電影:無興趣→「有事」;猶豫→「帶同事」;喜歡→「幾點?再去酒吧」狀態類、上下文委派、消除 if-else
策略定義算法族,封裝互換不同 MM **不同約會策略**:看電影/吃小吃/海邊散步,目的同手段異算法族、運行時切換、開閉原則
模板方法定義算法骨架,子類實現細節《如何說服女生上床》**八大步驟固定**,每步具體話術因人而異骨架固定、細節延遲、好萊塢原則
訪問者分離數據結構與操作,新增操作不改結構情人節送禮:**花店老板選花、禮品店老板選卡**,根據 MM 特質定製雙分派、跨層級訪問、操作擴展易

模式選型決策樹(簡化版)

  1. **創建對象困難/變化大** → 創建型(工廠/建造者/原型/單例)。
  2. **類/對象組合關係複雜/需解耦** → 結構型(適配器/橋接/裝飾器/代理/外觀/享元/組合)。
  3. **行為分配、算法封裝、通信協作** → 行為型(策略/模板/觀察者/命令/狀態/訪問者/中介者/備忘錄/責任鏈/迭代器/解釋器)。

避坑指南:不要為了用模式而用模式

  • KISS 原則:能用 `if-else` 解決別上策略模式;能用 `new` 別上工廠。
  • YAGNI:當前不需要擴展點,別預留抽象。
  • 識別變化點:模式針對**已識別、高概率變化**的維度,而非臆造。
  • 重構引入:先寫直觀代碼,重構時發現重複/耦合/僵化,再引入模式。

經典書籍推薦

  • 《Head First 設計模式》(入門首選,圖文並茂、大腦友好)
  • 《設計模式:可復用面向對象軟件的基礎》(GoF 原著,字典式查閱)
  • 《重構:改善既有代碼的設計》(模式的落地前奏)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved