在PHP中,命令模式(Command Pattern)是一种行为设计模式,它将一个请求封装为一个对象,从而使你可用不同的请求、队列、日志来参数化其他对象。命令模式也支持可撤销的操作。下面是一个简单的PHP命令模式使用示例:
首先,我们定义一个命令接口,它包含一个执行命令的方法:
interface Command {
public function execute();
}
然后,我们定义几个具体的命令类,这些类实现了`Command`接口:
class LightOnCommand implements Command {
private $light;
public function __construct(Light $light) {
$this->light = $light;
}
public function execute() {
$this->light->on();
}
}
class LightOffCommand implements Command {
private $light;
public function __construct(Light $light) {
$this->light = $light;
}
public function execute() {
$this->light->off();
}
}
注意,上面的示例中引用了`Light`类,它是一个可能的接收者(Receiver)类,用来表示可以被操作的对象,比如灯的开关:
class Light {
public function on() {
echo "Light is on\n";
}
public function off() {
echo "Light is off\n";
}
}
最后,我们需要一个调用者(Invoker)类,它可以接受命令对象并执行它们:
class RemoteControl {
private $command;
public function setCommand(Command $command) {
$this->command = $command;
}
public function pressButton() {
$this->command->execute();
}
}
// 使用示例
$light = new Light();
$lightOnCommand = new LightOnCommand($light);
$lightOffCommand = new LightOffCommand($light);
$remote = new RemoteControl();
$remote->setCommand($lightOnCommand);
$remote->pressButton(); // 输出: Light is on
$remote->setCommand($lightOffCommand);
$remote->pressButton(); // 输出: Light is off
在这个示例中,`RemoteControl`是调用者,它接受并执行不同的命令对象。这些命令对象封装了`Light`对象的状态变化,即灯的开关操作。这样,通过更换不同的命令对象,调用者(`RemoteControl`)可以在不知道具体操作细节的情况下,执行不同的操作。