1. 程式人生 > >B6:命令模式 Command

B6:命令模式 Command

請求 extend nds ron turn ons 撤銷 return 重做

將一個請求封裝成一個對象,從而可以用不同的請求對象對客戶進行參數化,對請求排隊或記錄請求日誌,以及支持可撤銷的操作.

使用場景:
1.可設計一個隊列
2.較容易將命令計入日誌
3.允許接收的一方是決定是否否決請求
4.可以實現對請求的撤銷和重做
5.加入新的命令類不影響其他的類.
6.把請求一個操作的對象與執行操作的對象分離開.

UML

技術分享

示例代碼:

abstract class  Command
{
    protected $receiver;

    public function __construct(Receiver $receiver)
    {
        $this->receiver = $receiver;
    }

    abstract public  function execute($params);
}

class UserCommand extends Command
{
    public function execute($params)
    {
        return $this->receiver->command($params);
    }
}


interface Receiver
{
    public function command($params);
}

class User implements Receiver
{
    public function command($parms)
    {
        echo ‘寫入日誌:用戶增加成功‘ . $parms;
    }
}


class Invoker
{
    protected $command;

    public function setCommand(Command $command)
    {
        $this->command = $command;
    }

    public function execute($params)
    {
        return $this->command->execute($params);
    }
}

$receiver = new User();

$invoker = new Invoker();
$invoker->setCommand(new UserCommand($receiver));
$invoker->execute(‘jack‘);

  

B6:命令模式 Command