一.核心概念
對軟件設計中重復出現問題的成熟解決方案,提供代碼可重用性、可維護性和擴展性保障。核心原則包括:
1.1. 單一職責原則?
- ?定義?:一個類只承擔一個職責,避免因職責過多導致的代碼耦合。
1.2. 開閉原則?
- ?定義?:應對擴展開放,對修改關閉。
- ?說明?:允許添加新功能而不破壞現有系統,已有代碼應盡可能保持穩定不修改。
3. 里氏替換原則?
- ?定義?:子類必須能替換父類且不影響程序正確性
- ?說明:子類不改變父類原有行為,僅擴展功能。
1.4. 接口隔離原則?
- ?定義?:類不應依賴不需要的接口,需將龐大接口拆分為多個獨立小接口
- ?說明?:減少接口污染,避免類因無關方法被迫變更
1.5. 依賴倒置原則?
- ?定義?:高層模塊不依賴低層模塊,二者應共同依賴抽象
- ?說明?:通過接口編程解耦。
1.6. 迪米特法則?
- ?定義?(最少知道原則):對象僅與直接朋友交互,減少與非直接類的依賴。
- ?說明?:降低耦合,如A調用B,B調用C時,A無需知曉C的存在。
二.分類體系
2.1.創建型
解耦對象創建過程.
?設計模式? | ?解耦手段? | ?適用場景? |
---|---|---|
?工廠方法模式? | 子類實現工廠接口,封裝具體對象的實例化過程 | 需動態切換同類型對象(如不同數據庫連接) |
?抽象工廠模式? | 提供接口創建?一組關聯對象?,隔離產品族依賴 | 跨平臺UI組件、多套數據庫適配等場景 |
?建造者模式? | 分離復雜對象的?構建步驟?與表示方式 | 構造含多部件的對象(如訂單、配置對象) |
?原型模式? | 通過復制原型實例創建新對象,繞過顯式構造函數 | 創建成本高的對象(如深度克隆配置模板) |
?單例模式? | 全局唯一訪問點,避免重復創建實例 | 資源管理器、配置中心等需全局唯一性的場景 |
2.2.結構型
處理類/對象間的組合關系(包括組合、聚合和依賴關系)
2.2.1什么是組合關系?
關系類型? | ?生命周期依賴? | ?典型模式應用? | ?案例說明? |
---|---|---|---|
?組合關系? (?Composition?) | ?強綁定?:部分對象不能獨立于整體存在 (整體銷毀則部分銷毀) | ?組合模式?:文件夾(整體)刪除時,其內部文件(部分)同步銷毀 | 汽車引擎脫離汽車即失去功能意義 |
?聚合關系? (?Aggregation?) | ?弱綁定?:部分對象可獨立于整體存在 | ?裝飾器模式?:移除咖啡的“牛奶裝飾層”后,原始咖啡對象仍有效5 ?享元模式?:棋子對象池獨立于棋局存在 | 班級解散后,學生仍可作為獨立個體存在 |
?依賴關系? (?Dependency?) | ?臨時性?:通過參數傳遞臨時使用對象 | ?代理模式?:客戶端通過代理對象間接訪問真實對象(如網絡請求代理) ?適配器模式?:適配器臨時調用被適配對象 | 支付接口適配器中,僅在使用時臨時依賴舊支付系統對象 |
2.2.2.結構性設計模式如何處理類/對象間的組合關系?
模式? | ?核心目的? | ?組合關系處理方式? | ?典型應用場景? |
---|---|---|---|
?適配器模式? | 解決接口不兼容問題 | ?對象組合?:適配器類聚合被適配對象,轉換接口邏輯 | 集成舊系統、第三方庫適配 |
?橋接模式? | 分離抽象與實現,支持多維擴展 | ?組合抽象與實現?:抽象類聚合實現接口,運行時動態綁定(如形狀+渲染引擎組合) | 跨平臺UI開發、多數據庫驅動 |
?組合模式? | 統一處理樹形結構的部分-整體關系 | ?遞歸組合?:容器節點(Composite)聚合子組件(Component),遞歸調用操作 | 文件系統、組織架構、GUI組件樹 |
?裝飾器模式? | 動態添加功能,避免子類爆炸 | ?對象聚合?:裝飾器類聚合原始對象,疊加新行為(如咖啡+牛奶/糖裝飾層) | 流處理(I/O緩沖)、權限校驗鏈 |
?外觀模式? | 簡化復雜子系統的調用 | ?聚合子系統對象?:外觀類組合多個子系統接口,提供統一入口 | 封裝SDK、簡化API調用 |
?享元模式? | 減少重復對象創建,節省資源 | ?共享對象池?:享元工廠組合共享對象池,復用相同狀態(如棋盤中的棋子實例) | 游戲實體管理、文本編輯器字符池 |
?代理模式? | 控制對象訪問,增強功能 | ?對象代理?:代理類聚合真實對象,攔截請求(如延遲加載、權限校驗) | 遠程調用、緩存代理、安全控制 |
2.3.行為型
優化對象間通信與責任分配
模式? | ?優化重點? | ?典型場景? | ?通信/職責特點? |
---|---|---|---|
觀察者模式 | 事件通知機制 | 消息訂閱、GUI事件響應 | 一對多廣播式通信 |
中介者模式 | 集中協調多對象交互 | 聊天室、飛機調度系統 | 多對一中介調度 |
職責鏈模式 | 動態選擇處理者 | 審批流程、異常處理鏈 | 請求沿鏈傳遞,職責動態分配 |
策略模式 | 算法可替換性 | 支付方式、排序算法切換 | 行為抽象,運行時注入 |
狀態模式 | 狀態驅動行為變更 | 訂單狀態機、游戲角色狀態 | 狀態轉移觸發行為更新 |
命令模式 | 請求封裝與生命周期管理 | 操作撤銷/重做、任務隊列 | 請求對象化,支持存儲與回溯 |
💡 如果本文對你有幫助,點擊右上角【訂閱專欄】或左上角關注我
🔔 完整的23中設計模式干貨,第一時間推送給你!