結構型模式探討類與物件的組合結構:類結構型模式採用繼承組合介面/實作;物件結構型模式透過物件組合實現新功能。七大模式雖相似,側重點各異:
- Adapter:轉換既有介面 (繼承/組合)。
- Bridge:抽象與實作分離,支援多維度獨立變化。
- Decorator:物件組合動態擴充功能,強調擴充介面。
- Composite:模糊單一/複雜元素界限,構建樹狀結構。
- Facade:簡化子系統介面,解耦客戶端與內部複雜度,屬架構層面模式。
- Flyweight:共享細粒度物件降低記憶體開銷,關注微小物件。
- Proxy:代理控制存取,增加間接層簡化複雜問題。
一、模式差異深度比較
1. Bridge vs Decorator
兩者皆減少子類爆炸,但手法不同:
- Decorator:將子類新增功能抽離為獨立裝飾類,透過組合疊加功能。

- Bridge:將實作細節抽離為獨立實作階層,抽象與實作各自獨立變化。

2. Facade vs Proxy
皆引入間接層,但側重不同:
- Proxy:控制特定物件存取 (遠程、虛擬、保護、快取等)。

- Facade:簡化整個子系統介面。某些場合 Facade 兼具 Proxy 職責 (如遠程 Facade)。

3. Adapter 兩種形式
類適配器 (多重繼承) vs 物件適配器 (組合),建議優先使用物件適配器:

二、封裝變化的核心哲學
「找出系統可變因素,將之封裝」——應對變化的永恆主題。
單一繼承封裝單一變化
抽象層 (不變業務邏輯) + 實作層 (可變具體邏輯),客戶端依賴抽象,實現多態替換:


雙重變化無法用單一繼承處理
若抽象與實作皆需變化,單一繼承會產生笛卡爾積爆炸:

正解:兩個獨立階層 + 組合關係 (Bridge 模式)
- 抽象階層封裝抽象化變化。
- 實作階層封裝實作化變化。
- 兩者透過聚合關係組合,達成功能復用。

錯誤嘗試:繼承矩陣
繼續用繼承連接兩階層會導致多重繼承複雜、違反開放-封閉原則:

正確架構:Bridge 模式

三、設計原則總結
- 良好設計通常不超過兩層繼承。
- 出現兩個以上變化因素,需識別靜態因素 (用繼承) 與動態因素 (用組合)。
- 結構型模式本質上皆在「封裝變化」,Bridge 模式是雙重變化封裝的典範。
掌握結構型模式比較與封裝變化哲學,即能在架構設計中遊刃有餘,構建穩固且可演進的系統。