1. 程式人生 > 實用技巧 >php 23種設計模式 - 命令模式

php 23種設計模式 - 命令模式

命令模式

將一個請求封裝為一個物件,從而使使用者可用不同的請求對客戶進行引數化。對請求排隊或記錄請求日誌,以及支援撤銷的操作。

命令模式以鬆散耦合主題為基礎,傳送訊息、命令和請求,或通過一組處理程式傳送任意內容。每個處理程式都會自行判斷自己能否處理請求。如果可以,該請求被處理,程序停止。您可以為系統新增或移除處理程式,而不影響其他處理程式。

命令模式的四種角色:

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);

  

23種模式總覽 :https://www.cnblogs.com/houss/p/11121584.html