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

PHP 設計模式結構型模式總覽:適配器、橋接、外觀、組合、裝飾、代理、享元

     編輯:PHP 綜合知識

前言

結構型模式關注類與物件的組合方式,核心在於透過繼承與組合建立靈活的結構。PHP 物件模型支援介面實作、類繼承與物件組合三種關係,結構型模式即在此基礎上演化。本文系統梳理七大結構型模式分類、核心意圖與適用場景,幫助開發者快速選型。

一、競爭耦合三劍客:適配器、橋接、外觀

三者目標皆為降低耦合,但切入點不同:

模式核心意圖關鍵結構典型場景
適配器 將不相容介面轉換為客戶期望介面 Adapter 實作 Target 介面,持有 Adaptee 實例 第三方庫整合、舊系統介面兼容、多資料庫驅動統一
橋接 將抽象與實現分離,使兩者可獨立變化 Abstraction 持有 Implementor 介面,M×N → M+N 類別 跨平台 GUI、訊息發送(郵件/簡訊/推播)× 格式(文字/HTML/Markdown)
外觀 為子系統提供統一高層介面,簡化客戶端使用 Facade 委派給內部多個類別,隱藏複雜度 框架啟動類、Service Layer 封裝 Repository、簡化複雜 API

二、維持相同介面三兄弟:組合、裝飾、代理

三者皆實作相同介面,透明地為物件增加正交關注點,客戶端無感知:

模式核心意圖關鍵差異典型場景
組合 將物件組成樹狀結構,統一「部分-整體」操作 Container 與 Leaf 共用 Component 介面,Container 遞迴包含子節點 檔案系統、UI 元件樹、選單結構、組織架構
裝飾 動態為物件增加職責,避免子類爆炸 Decorator 持有 Component,攔截呼叫並添加行為,可多層疊加 IO 流過濾(壓縮/加密/緩存)、日誌記錄、快取、HTTP 中介軟體
代理 為物件提供替身,控制存取(建立時機/權限/遠程) Proxy 持有 RealSubject,決定何時/如何委派,通常單層 ORM 惰性載入、RPC Stub、圖片延遲載入、存取控制

三、享元模式:無身份的值物件共享

  • 意圖: 以共享方式高效支援大量細粒度物件,區分內部狀態(可共享)與外部狀態(由客戶端管理)。
  • 結構: FlyweightFactory 管理 Flyweight 池,Client 傳遞外部狀態呼叫操作。
  • PHP 應用: 字元符號、棋子、地圖格、資料庫連線池、DTO/Value Object 快取。
  • 注意: PHP 請求級生命週期短,跨請求共享需配合 Redis/Memcached,單請求內共享效果有限。

四、模式選型決策樹

需要統一介面嗎?
├── 是 → 需要樹狀結構? → 是 → 組合模式
│                └── 否 → 需要動態添加行為? → 是 → 裝飾模式
│                                 └── 否 → 需要控制存取/延遲建立? → 是 → 代理模式
│                                                     └── 否 → 享元模式(共享細粒度物件)
└── 否 → 需要轉換介面? → 是 → 適配器模式
              └── 否 → 需要抽象與實現分離? → 是 → 橋接模式
                                    └── 否 → 需要簡化子系統介面? → 是 → 外觀模式

五、PHP 實作要點

  1. 介面為王: 所有結構型模式核心皆為「介面契約」,嚴格定義介面是前提。
  2. 組合優於繼承: 裝飾、代理、組合皆透過物件組合實現,符合合成復用原則。
  3. 型別提示: 參數/回傳宣告介面型別,而非具體類別,保持彈性。
  4. 避免過度設計: 簡單情況下,陣列、閉包、Trait 可能比正式模式更輕量。

六、總結

結構型模式提供七種經典組合策略,解決介面不兼容、抽象實現綁定、子系統複雜、樹狀結構、動態增強、存取控制、細粒度物件共享等問題。實務中常組合使用:如 Facade 內部使用 Adapter 整合第三方、Decorator 包裝 Proxy 增加日誌、Composite 節點使用 Flyweight 共享圖示。掌握各模式意圖與邊界,靈活組合,才能駕馭複雜系統架構。

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