php 23種設計模式 - 命令模式
阿新 • • 發佈:2020-08-27
命令模式
將一個請求封裝為一個物件,從而使使用者可用不同的請求對客戶進行引數化。對請求排隊或記錄請求日誌,以及支援撤銷的操作。
命令模式以鬆散耦合主題為基礎,傳送訊息、命令和請求,或通過一組處理程式傳送任意內容。每個處理程式都會自行判斷自己能否處理請求。如果可以,該請求被處理,程序停止。您可以為系統新增或移除處理程式,而不影響其他處理程式。
命令模式的四種角色:
1. 接收者(Receiver)負責執行與請求相關的操作
2. 命令介面(Command)封裝execute()、undo()等方法
3. 具體命令(ConcreteCommand)實現命令介面中的方法
4. 請求者(Invoker)包含Command介面變數
interface ICommand { function onCommand($name, $args); } class CommandChain { private $_commands = array(); public function addCommand($cmd) { $this->_commands []= $cmd; } public function runCommand($name, $args) { foreach($this->_commands as $cmd) { if ($cmd->onCommand($name, $args)) return; } } } class UserCommand implements ICommand { public function onCommand($name, $args) { if ($name != 'addUser') return false; echo("UserCommand handling 'addUser'\n"); return true; } } class MailCommand implements ICommand { public function onCommand($name, $args) { if ($name != 'mail') return false; echo("MailCommand handling 'mail'\n"); return true; } } $cc = new CommandChain(); $cc->addCommand(new UserCommand()); $cc->addCommand(new MailCommand()); $cc->runCommand('addUser', null); $cc->runCommand('mail', null);