命令模式(Command)是一种非常常用的设计模式,
其本质是对命令进行封装,将发出命令的责任和执行命令的责任分割开,降低对象之间的耦合度,新的命令可以很容易地加入到系统中。
命令模式之所以常用的优势就在于可以将请求发送者和接收者完全解耦,而系统解耦是系统的终极目标。
解耦之后调用某些对象的某些方法,并不知道请求的接收者是谁。
输出结果:
其本质是对命令进行封装,将发出命令的责任和执行命令的责任分割开,降低对象之间的耦合度,新的命令可以很容易地加入到系统中。
命令模式之所以常用的优势就在于可以将请求发送者和接收者完全解耦,而系统解耦是系统的终极目标。
解耦之后调用某些对象的某些方法,并不知道请求的接收者是谁。
物联网环境下人工智能发展迅速,现在的智能灯,只需要连接手机就可以轻松操控,冬天躺在床上轻松实施打开关闭。
<?php
header("Content-Type:text/html;charset=utf-8");
require_once "Command.php";
// 智能灯
$lamp = new Lamp();
// 开灯命令
$on = new onCommand($lamp);
// 关灯命令
$off = new offCommand($lamp);
// 控制器类 请求者 不用知道对象是谁
$_c = new Control($on,$off);
$_c->turnOn(); // 开灯方法
$_c->turnOff(); // 关灯方法
<?php
// 智能灯类
Class Lamp
{
/**
* 开灯方法
* @access public
*/
public function TurnOn()
{
echo "已帮您打开智能灯<br/>";
}
/**
* 关灯方法
* @access public
*/
public function TurnOff()
{
echo "已帮您关闭智能灯<br/>";
}
}
// 命令抽象总类
abstract Class ICommand
{
/**
* 抽象执行方法
* @access public
*/
abstract public function Execute();
}
// 开灯命令
Class onCommand extends ICommand
{
/**
* 智能灯对象
* @var object private
*/
private $_lamp;
/**
* 构造函数
* @access public
* @param object $lamp 智能灯对象
*/
function __construct($lamp)
{
$this->_lamp = $lamp;
}
/**
* 开灯执行方法
* @access public
*/
function Execute()
{
$this->_lamp->TurnOn();
}
}
// 关灯命令
Class offCommand extends ICommand
{
/**
* 智能灯对象
* @var object private
*/
private $_lamp;
/**
* 构造函数
* @access public
* @param object $lamp 智能灯对象
*/
function __construct($lamp)
{
$this->_lamp = $lamp;
}
/**
* 关灯执行方法
* @access public
*/
function Execute()
{
$this->_lamp->TurnOff();
}
}
// 遥控器类
Class Control
{
/**
* 开灯命令对象
* @var object private
*/
private $_on;
/**
* 关灯命令对象
* @var object private
*/
private $_off;
/**
* 构造函数
* @access public
* @param object $on 开灯对象
* @param object $off 关灯对象
*/
function __construct($on,$off)
{
$this->_on = $on;
$this->_off = $off;
}
/**
* 开灯函数
* @access public
*/
function turnOn()
{
$this->_on->Execute();
}
/**
* 关灯函数
* @access public
*/
function turnOff()
{
$this->_off->Execute();
}
}
输出结果:
已帮您打开智能灯
已帮您关闭智能灯