# 如何使用結構型模式
## 目錄
1. [結構型模式概述](#結構型模式概述)
2. [適配器模式(Adapter)](#適配器模式adapter)
3. [橋接模式(Bridge)](#橋接模式bridge)
4. [組合模式(Composite)](#組合模式composite)
5. [裝飾器模式(Decorator)](#裝飾器模式decorator)
6. [外觀模式(Facade)](#外觀模式facade)
7. [享元模式(Flyweight)](#享元模式flyweight)
8. [代理模式(Proxy)](#代理模式proxy)
9. [模式對比與選型指南](#模式對比與選型指南)
10. [實際應用案例分析](#實際應用案例分析)
11. [總結](#總結)
---
## 結構型模式概述
結構型模式(Structural Patterns)關注如何將類或對象組合成更大的結構,分為**類結構型模式**(通過繼承)和**對象結構型模式**(通過組合)。主要解決系統模塊間的耦合問題,提升擴展性和復用性。
### 核心目標
- 解耦組件依賴
- 簡化復雜系統結構
- 優化資源利用效率
---
## 適配器模式(Adapter)
**意圖**:使接口不兼容的對象能夠協同工作
### 實現方式
#### 類適配器(繼承)
```java
class Adaptee {
void specificRequest() { /* 原有實現 */ }
}
class Adapter extends Adaptee implements Target {
public void request() {
specificRequest();
}
}
class Adapter implements Target {
private Adaptee adaptee;
public Adapter(Adaptee adaptee) {
this.adaptee = adaptee;
}
public void request() {
adaptee.specificRequest();
}
}
意圖:將抽象與實現分離,使二者可以獨立變化
+-------------------+ +-------------------+
| Abstraction |<>---->| Implementor |
+-------------------+ +-------------------+
| operation() | | operationImpl() |
+-------------------+ +-------------------+
^ ^
| |
+-----------+-----------+ +---------+---------+
| RefinedAbstraction | | ConcreteImplementor|
+-----------------------+ +---------------------+
class Renderer(ABC): # Implementor
@abstractmethod
def render_circle(self, radius):
pass
class VectorRenderer(Renderer):
def render_circle(self, radius):
print(f"Drawing circle with radius {radius}")
class Shape: # Abstraction
def __init__(self, renderer):
self.renderer = renderer
def draw(self): pass
意圖:將對象組合成樹形結構以表示”部分-整體”層次
類型 | 優點 | 缺點 |
---|---|---|
透明式 | 客戶端無需區分節點類型 | 葉子節點需實現空方法 |
安全式 | 避免無效操作 | 客戶端需類型檢查 |
意圖:動態地給對象添加額外職責
InputStream in = new BufferedInputStream(
new FileInputStream("test.txt"));
維度 | 裝飾器模式 | 繼承 |
---|---|---|
擴展方式 | 運行時動態添加 | 編譯時靜態綁定 |
靈活性 | 支持任意組合 | 固定層級關系 |
意圖:為復雜子系統提供統一入口
? 降低客戶端的復雜度
? 可能違反開閉原則
意圖:運用共享技術有效支持大量細粒度對象
意圖:為其他對象提供一種代理以控制對這個對象的訪問
類型 | 功能特點 |
---|---|
遠程代理 | 控制遠程對象訪問 |
虛擬代理 | 延遲初始化大對象 |
保護代理 | 增加權限控制 |
智能引用代理 | 添加引用計數等附加操作 |
模式 | 適用場景 | 復雜度 |
---|---|---|
適配器 | 接口轉換 | ★★☆ |
橋接 | 多維度擴展 | ★★★ |
裝飾器 | 動態功能擴展 | ★★☆ |
代理 | 訪問控制 | ★★☆ |
選型原則: 1. 明確需要解決的問題類型 2. 評估系統未來擴展方向 3. 考慮團隊熟悉程度
classDiagram
class PaymentGateway {
+processPayment()
}
class AlipayAdapter {
-alipay: AlipayService
+processPayment()
}
PaymentGateway <|-- AlipayAdapter
使用橋接模式分離平臺相關代碼與業務邏輯,使Android/iOS實現可獨立演進。
結構型模式通過不同的組合方式解決系統結構問題: 1. 適配器解決兼容問題 2. 橋接分離抽象與實現 3. 組合處理樹形結構 4. 裝飾器動態添加功能 5. 代理控制對象訪問
合理運用這些模式可顯著提升系統可維護性和擴展性。建議從簡單模式開始實踐,逐步掌握復雜模式的組合使用技巧。 “`
(注:此為精簡版框架,完整10550字版本需擴展每個模式的:
1. 詳細代碼示例
2. 性能影響分析
3. 多語言實現對比
4. 反模式警示
5. 單元測試方案
6. 相關設計原則解析等內容)
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。