俗话说说出去的话就像撒出去的水,再也收不回,可以我们总有希望收回的时候。当发现下达错误的命令操作后,能否撤销操作操作呢?答案是可以,下面我们借助命令模式来完成这个功能。
在这里我们来构建一个智能家居系统,消费者可以发送指令给智能管家,然后智能管家根据命令调用家里的各种电器完成指定操作,从而调节我们的家居环境。总体来说,命令模式总也包含三大部分,命令(消费者指令),管理者(智能管家),命令实际执行者(电器),客户端并不关心命令是由谁执行的而又管家来决定,客户端只关心操作是否成功。
首先,命令模式的一个特点就是可以灵活添加命令,能够较容易地设计一个命令队列,基于这个特点,我们定义了命令部分的相关类如下:
//抽象命令类
abstract class command{
//命令名,用于检测命令是否被支持
public $commandName;
//命令接受者
public $receiver;
//设置命令接收者
function setReceiver($executor){
$this->receiver=$executor;
}
abstract function executeCommand();
}
//具体命令类(提高温度)
class raiseTemp extends command {
//初始化命令名和命令的执行者
public function __construct($receiver)
{
$this->receiver=$receiver;
$this->commandName='raiseTemp';
}
//命令的执行实际上是通过调用执行者的对应方法完成的
function executeCommand()
{