所有設計模式本質上都是對「可變性」的封裝,最終目標是滿足開閉原則。模塊設計優劣的核心標準在於:內部數據與實現細節對外部的隱藏程度。優秀模塊僅通過 API 通信,實現細節零洩漏。
定義:軟件實體對擴展開放,對修改關閉。
關鍵:抽象化。定義抽象類/接口作為穩定抽象層,預見變化點;具體類繼承/實現抽象層實現擴展。
兩大含義:
定義:依賴抽象,不依賴具體。
層次論:抽象層含核心業務邏輯(穩定、戰略);具體層含實現細節(易變、戰術)。
編程實踐:變量聲明用接口/抽象類(List list = new ArrayList())。
對象創建困境:new 必須指定具體類,違背原則。
解決方案:工廠模式族(簡單工廠、工廠方法、抽象工廠)將 new 封裝/延遲至可控範圍。
接口+抽象類組合:接口定類型,抽象類供默認實現(默認適配器模式)。
定義:任何基類出現處,子類必須能替換。
本質:抽象化的具體步驟規範。違反 LSP 的繼承(如 Stack extends Vector)必導致脆弱基類問題。
定義:優先組合/聚合,非必要不繼承。
機制:新對象委派已有對象實現功能。
與 LSP 關係:LSP 限制繼承使用條件;合成復用原則從架構層面推薦替代方案。
定義:實體間交互盡量少、盡量淺。
操作指南:
String, BigInteger — 狀態不可變,通信自然減少private,按需放寬定義:多個專用接口優於單一總接口。
隱喻:接口 = 戲劇角色,實現類 = 演員。一個接口僅代表一個角色。
定制服務:客戶端僅依賴所需方法,避免無用依賴傳播修改壓力。
與迪米特法則關係:迪米特限制通信廣度/深度;接口隔離限制接口寬度。
開閉原則 (目標)
↑
依賴倒置 (核心手段:抽象化)
↑
里氏替換 (繼承規範) ←→ 合成復用 (優先組合)
↑
迪米特法則 + 接口隔離 (模塊通信邊界控制)