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

.NET 設計模式精解(十五):結構型模式專題總結——封裝變化,構建穩固架構

     編輯:關於.NET

結構型模式探討類與物件的組合結構:類結構型模式採用繼承組合介面/實作;物件結構型模式透過物件組合實現新功能。七大模式雖相似,側重點各異:

  • 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 模式

橋接模式正確架構

三、設計原則總結

  1. 良好設計通常不超過兩層繼承。
  2. 出現兩個以上變化因素,需識別靜態因素 (用繼承) 與動態因素 (用組合)。
  3. 結構型模式本質上皆在「封裝變化」,Bridge 模式是雙重變化封裝的典範。

掌握結構型模式比較與封裝變化哲學,即能在架構設計中遊刃有餘,構建穩固且可演進的系統。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved