首页 > 代码库 > php实现设计模式之 命令模式
php实现设计模式之 命令模式
<?php /* * 命令模式:(行为模式)将一个请求封装成一个对象(命令封装成对象),从而可以使用不同的请求对客户参数化(客户的不同请求,调不同的封装对象), * 对请求排序,或者记录请求日志,以及支持可取消的操作 * 1 命令接口:声明执行方法 2 发起者 : 记录、撤销请求,请求命令执行 3 接受者 : 命令的具体实现角色。 4 具体命令: 包含接受者,调用接受者执行。 *///命令接口interface Command{ public function execute();}//命令发起者,记录,删除命令,请求执行命令class Invoker{ public $command = array(); public function setCommand($command){ $this->command[] = $command; } public function executeCommand(){//请求执行 foreach ($this->command as $key=>$value){ $value->execute(); echo "<br/>"; } } public function removeCommand($command){ $key = array_search($command, $this->command); if($key!==false){ unset($this->command[$key]); } }}//具体做事情的角色,接受者class Receiver{ public $name; public function __construct($name){ $this->name = $name; } public function action(){ echo $this->name.‘跳大‘; } public function action1(){ echo $this->name.‘防御‘; } public function action2(){ echo $this->name.‘治疗‘; }}//具体的三个命令,包含一个接受者,调用接受者去做class Command1 implements Command{ public $receiver; public function __construct($receiver){ $this->receiver = $receiver; } public function execute(){ $this->receiver->action(); }}class Command2 implements Command{ public $receiver; public function __construct($receiver){ $this->receiver = $receiver; } public function execute(){ $this->receiver->action1(); }}class Command3 implements Command{ public $receiver; public function __construct($receiver){ $this->receiver = $receiver; } public function execute(){ $this->receiver->action2(); }}/* * 请求流程:先实例化接受者(具体做事的角色),然后实例化命令。 * 接着实例化一个请求者,请求者注册命令,请求执行命令 */$role1 = new Receiver(‘盖伦‘);$role2 = new Receiver(‘皇子‘);$command1 = new Command1($role1);$command2 = new Command2($role1);$invoker = new Invoker();$invoker->setCommand($command1);$invoker->setCommand($command2);$invoker->executeCommand();?>
UML类图
php实现设计模式之 命令模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。