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

PHP 設計模式實戰:解析器、策略、觀察者、訪問者、命令模式完整代碼詳解

     編輯:PHP 相關知識

PHP 設計模式實戰:五大行為型模式完整演示

本文通過完整、可運行的 PHP 代碼,演示 解析器、策略、觀察者、訪問者、命令 五大經典行為型設計模式的核心結構與典型應用場景。

1. 解析器模式 —— 迷你語言解析引擎

構建 InterpreterContext 存儲變量值,Expression 抽象類定義 interpret(),具體類包括:

  • LiteralExpression:字面量
  • VariableExpression:變量
  • OperatorExpression 及子類 EqualsExpression、BooleanOrExpression、BooleanAndExpression:運算符

應用:構建 $input equals "4" or $input equals "four" 邏輯,動態賦值變量後反覆解析,輸出判斷結果。

2. 策略模式 —— 算法族熱插拔

Question 為上下文,聚合 Marker 策略介面。三種評分策略:

  • MarkLogicMarker:模擬邏輯引擎
  • MatchMarker:精確匹配
  • RegexpMarker:正則匹配

客戶端遍歷策略列表,同一題目不同策略得出不同結果,完美體現「定義算法族、封裝各自、使其可互換」。

3. 觀察者模式 —— 解耦事件通知

問題:Login 類硬編碼依賴 Logger、Notifier,擴展需修改核心代碼。
解決:引入 Observable、Observer 介面,Login 維護觀察者列表,notify() 統一分發。
進階:引入 LoginObserver 抽象類,構造函數自動註冊,doUpdate(Login $login) 類型安全,消除向下轉型風險。三種觀察者:SecurityMonitor(失敗郵件)、GeneralLogger(日誌)、PartnershipTool(IP 白名單 Cookie)。

4. 訪問者模式 —— 數據結構與操作分離

軍隊單元樹:Unit(葉子)、CompositeUnit(容器)、Army/TroopCarrier(具體容器)。
ArmyVisitor 定義 visitXxx() 系列方法,Unit::accept() 雙分發調用。
具體訪問者 TextDumpArmyVisitor 遍歷樹輸出縮進文本報表。新增操作(如統計火力、序列化)只需新增 Visitor,不動單元類。

5. 命令模式 —— 請求對象化,解耦調用者與接收者

Command 抽象類定義 execute(CommandContext)。
CommandFactory 根據 action 參數動態載入 {Action}Command.php(如 LoginCommand)。
Controller 持有 CommandContext(封裝 $_REQUEST),調用 factory->getCommand() 獲取命令並執行。
優勢:控制器無需知道具體業務邏輯,新增功能只需新增 Command 類,符合開閉原則。


五大模式代碼均可直接複製運行,建議在 IDE 中逐行調試,體會「雙分發」、「策略熱插拔」、「觀察者自動註冊」等精妙設計。

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