B6:命令模式 Command
阿新 • • 發佈:2017-11-06
請求 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