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

面向對象設計六大核心原則:從開閉原則到迪米特法則的實戰解讀

     編輯:Java 相關知識

前言:設計模式的基石

所有設計模式本質上都是對「可變性」的封裝,最終目標是滿足開閉原則。模塊設計優劣的核心標準在於:內部數據與實現細節對外部的隱藏程度。優秀模塊僅通過 API 通信,實現細節零洩漏。

六大原則深度解析

1. 開閉原則 — 總綱

定義:軟件實體對擴展開放,對修改關閉。
關鍵:抽象化。定義抽象類/接口作為穩定抽象層,預見變化點;具體類繼承/實現抽象層實現擴展。
兩大含義:

  • 可變性封裝到單一對象/繼承體系中(繼承是封裝變化的手段,非生成特殊對象)
  • 不同可變性不混合(繼承層級一般不超過兩層)

2. 依賴倒置原則 — 手段

定義:依賴抽象,不依賴具體。
層次論:抽象層含核心業務邏輯(穩定、戰略);具體層含實現細節(易變、戰術)。
編程實踐:變量聲明用接口/抽象類(List list = new ArrayList())。
對象創建困境:new 必須指定具體類,違背原則。
解決方案:工廠模式族(簡單工廠、工廠方法、抽象工廠)將 new 封裝/延遲至可控範圍。
接口+抽象類組合:接口定類型,抽象類供默認實現(默認適配器模式)。

3. 里氏替換原則 — 繼承規範

定義:任何基類出現處,子類必須能替換。
本質:抽象化的具體步驟規範。違反 LSP 的繼承(如 Stack extends Vector)必導致脆弱基類問題。

4. 合成/聚合復用原則 — 復用正道

定義:優先組合/聚合,非必要不繼承。
機制:新對象委派已有對象實現功能。
與 LSP 關係:LSP 限制繼承使用條件;合成復用原則從架構層面推薦替代方案。

5. 迪米特法則 — 通信最小化

定義:實體間交互盡量少、盡量淺。
操作指南:

  1. 優先不可變類:String, BigInteger — 狀態不可變,通信自然減少
  2. 吝啬提供 Setter:除非必要,否則不暴露修改入口
  3. 最小化訪問權限:默認 private,按需放寬
  4. 謹慎實現 Serializable:序列化鎖定類結構,含 private 成員

6. 接口隔離原則 — 接口精準化

定義:多個專用接口優於單一總接口。
隱喻:接口 = 戲劇角色,實現類 = 演員。一個接口僅代表一個角色。
定制服務:客戶端僅依賴所需方法,避免無用依賴傳播修改壓力。
與迪米特法則關係:迪米特限制通信廣度/深度;接口隔離限制接口寬度。

原則關係圖譜

開閉原則 (目標)
    ↑
依賴倒置 (核心手段:抽象化)
    ↑
里氏替換 (繼承規範) ←→ 合成復用 (優先組合)
    ↑
迪米特法則 + 接口隔離 (模塊通信邊界控制)

實戰啟示

  • 設計時先畫「變化點地圖」,每個變化點對應一個抽象接口
  • 類圖繼承關係 ≤ 2 層,超過即為混合可變性
  • 構造器注入接口依賴,工廠隔離具體類創建
  • 不可變對象優先,領域模型儘量無 Setter
  • 接口細粒度拆分,客戶端見什麼依賴什麼
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved