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

PHP 設計模式核心概念:耦合性、多型性與 23 種經典模式總覽

     編輯:PHP 相關知識

什麼是設計模式?

設計模式是軟體開發中**經驗總結的可復用解決方案模板**,針對特定情境下的重複問題。每個模式包含:

  • 名稱:共同詞彙,溝通零成本 (如「單例」、「工廠」)。
  • 問題陳述:適用情境、症狀。
  • 解決方案:類別/物件結構、協作關係、實現細節、優缺點權衡。

核心設計原則

原則核心思想關鍵字
單一職責 (SRP)一個類別只負責一項功能內聚
開放封閉 (OCP)對擴展開放,對修改關閉抽象、多型
里氏替換 (LSP)子類別必須能替換父類別契約、繼承
介面隔離 (ISP)介面精小,不強迫實現不需要的方法解耦
依賴倒置 (DIP)高層模組不依賴低層,雙方依賴抽象介面、注入
迪米特法則 (LoD)最少知識,只與直接朋友溝通低耦合
合成復用 (CRP)優先組合/聚合,少用繼承組合>繼承

耦合性

定義:模組間相依程度的度量。耦合越強,修改一模組影響其他模組的風險越高,獨立性越差。

耦合類型強度說明建議
內容耦合最強直接修改另一模組內部資料/代碼嚴禁
共用耦合強共用全域資料區避免
控制耦合中傳遞控制旗標/開關決定邏輯減少
標記耦合中傳遞資料結構 (陣列/物件)可接受
資料耦合弱僅傳遞基本型別參數推薦
無耦合最弱模組間無直接關聯理想

目標:高內聚、低耦合。透過介面、依賴注入、事件總線、中介者模式降低耦合。

多型性

定義:同一介面、不同實現。將「是什麼」(介面) 與「怎麼做」(實現) 分離。

  • 編譯時多型:方法多載 (PHP 不支援)、運算子多載。
  • 執行時多型:繼承覆寫、介面實現、鴨子型別 (PHP 動態語言特性)。

價值:

  1. 程式碼組織清晰、可讀性高
  2. 易於擴展:新增實現不修改既有代碼 (OCP)
  3. 支援依賴倒置:高層依賴抽象介面,低層實現介面
  4. 測試友善:可注入 Mock/Stub 實現

GoF 23 種經典設計模式分類總覽

創建型 (5) - 物件實例化管理

模式核心意圖關鍵詞
Singleton (單例)全域唯一實例私有建構子、靜態獲取
Factory Method (工廠方法)延遲到子類決定實例化哪個類抽象工廠、多型
Abstract Factory (抽象工廠)創建相關/相依物件家族介面、多產品族
Builder (建造者)分步驟建構複雜物件鏈式調用、Director
Prototype (原型)透過複製現有實例創建新物件clone、原型管理器

結構型 (7) - 類別/物件組合

模式核心意圖關鍵詞
Adapter (適配器)轉換介面使不兼容類別協作Wrapper、介面轉換
Bridge (橋接)抽象與實現分離獨立變化兩個維度、組合
Composite (組合)樹狀結構統一單一/容器物件遞歸、Component
Decorator (裝飾者)動態添加職責,替代繼承包裝、疊加
Facade (外觀)提供子系統統一高層介面簡化介面、門面
Flyweight (享元)共享細粒度物件節省記憶體內部/外部狀態、池
Proxy (代理)控制對真實物件的訪問延遲載入、權限、日誌

行為型 (11) - 物件間協作與職責分配

模式核心意圖關鍵詞
Chain of Responsibility (職責鏈)請求沿鏈傳遞,自動處理Handler、next
Command (命令)將請求封裝為物件Receiver、Invoker、Undo
Interpreter (解釋器)定義語言文法與解釋器AST、Context
Iterator (迭代器)順序存取聚合物件元素next、current、yield
Mediator (中介者)封裝物件間交互,降低耦合Hub、Colleague
Memento (備忘錄)捕獲/恢復物件內部狀態Originator、Caretaker
Observer (觀察者)一對多依賴,狀態變更自動通知發布/訂閱、Subject
State (狀態)物件行為隨內部狀態改變State介面、Context
Strategy (策略)封裝演算法族,可互換演算法介面、Context
Template Method (模板方法)定義演算法骨架,子類實現步驟鉤子方法、final
Visitor (訪問者)分離演算法與物件結構雙分派、accept/visit

PHP 常用 5 大模式 (實戰高頻)

  1. 工廠模式:資料庫連線、日誌驅動、快取驅動建立
  2. 單例模式:配置、資料庫連線池、日誌器 (或改用 DI 容器)
  3. 觀察者模式:事件系統、模型觀察者、快取失效通知
  4. 策略模式:支付閘道、匯出格式、驗證規則、排序演算法
  5. 適配器/外觀模式:第三方 SDK 統一介面、舊系統遷移

學習建議

  • 先理解 **SOLID 原則**,再學模式,否則易成「為模式而模式」。
  • 從實際專案痛點出發:重複代碼 → 模板方法/策略;if-else 滿天飛 → 工廠/策略/狀態;強耦合 → 適配器/外觀/中介者/觀察者。
  • 閱讀優秀開源框架源碼:Laravel (Service Container、Facade、Manager)、Symfony (DI、EventDispatcher)、Yii (Module、Behavior)。
  • 實作練習:手寫一個簡易 IOC 容器、事件總線、插件系統。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved