多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
#### 命令模式 在软件设计中,我们有时需要向某些对象发送请求(命令),但是对于请求(命令)发送者来说,并不知道请求(命令)的接收者是谁,它只需要发送命令即可;对于请求(命令)的接受者来说,他也并不知道给他发送请求(命令)的是谁,它只需要在有请求(命令)时执行自己的 action 即可。具体的请求(命令)发送者和接受者,我们就可以根据自己的需求自由组合。使得请求发送者与请求接收者消除彼此之间的耦合,让对象之间的调用关系更加灵活。 主要特点就是将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。命令模式是一种对象行为型模式,其别名为动作(Action)模式或事务(Transaction)模式。 `角色` Command: 抽象命令类 ConcreteCommand: 具体命令类 Invoker: 调用者 Receiver: 接收者 Client:客户类 `UML类图` ![此处输入图片的描述](https://doc.shiyanlou.com/document-uid108299labid2297timestamp1486375353023.png) `示例代码`:`Command.class.php` ~~~php <?php class Receiver { public function Action() { echo "Receiver->Action"; } } abstract class Command{ protected $receiver; function __construct(Receiver $receiver) { $this->receiver = $receiver; } abstract public function Execute(); } class MyCommand extends Command { function __construct(Receiver $receiver) { parent::__construct($receiver); } public function Execute() { $this->receiver->Action(); } } class Invoker { protected $command; function __construct(Command $command) { $this->command = $command; } public function Invoke() { $this->command->Execute(); } } $receiver = new Receiver(); $command = new MyCommand($receiver); $invoker = new Invoker($command); $invoker->Invoke(); ~~~