首页 > 代码库 > 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实现设计模式之 命令模式