命令鏈 模式以鬆散耦合主題為基礎,發送訊息、命令和請求,或通過一組處理常式發送任意內容。每個處理常式都會自行判斷自己能否處理請求。如果可以,該請求被處理,進程停止。您可以為系統添加或移除處理常式,而不影響其他處理常式。
以下代碼顯示了此模式的一個樣本。
<?php//定義命令介面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 run command addUser<br>';}}//定義一個發送郵件的命令對象class MailCommand implements ICommand {public function onCommand($name,$args){if($name != 'mail'){return false;}echo 'MailCommand run command mail<br>';}}//定義維護命令對象列表的類$commandChain = new CommandChain();//執行個體化命令對象$user = new UserCommand();$mail = new MailCommand();//添加命令對象到列表中$commandChain->addCommand($user);$commandChain->addCommand($mail);//執行命令$commandChain->runCommand('addUser',null);$commandChain->runCommand('mail',null);
此代碼定義維護 ICommand
對象列表的 CommandChain
類。兩個類都可以實現 ICommand
介面 —— 一個對郵件的請求作出響應,另一個對添加使用者作出響應。
如果您運行包含某些測試代碼的指令碼,則會得到以下輸出:
650) this.width=650;" title="QQ20131221213650.png" src="http://www.bkjia.com/uploads/allimg/131229/1215164956-0.png" alt="213621694.png" />
代碼首先建立 CommandChain
對象,並為它添加兩個命令對象的執行個體。然後運行兩個命令以查看誰對這些命令作出了響應。如果命令的名稱不匹配 UserCommand
或 MailCommand
,則代碼失敗,不發生任何操作。
為處理請求而建立可擴充的架構時,命令鏈模式很有價值,使用它可以解決許多問題。
本文出自 “phper-每天一點點~” 部落格,請務必保留此出處http://janephp.blog.51cto.com/4439680/1343599