- <?php
- /**
- * 命令模式
- *
- * 将一个请求封装为一个对象从而使你可用不同的请求对客户进行参数化,对请求排除或记录请求日志,以及支持可取消的操作
- */
- interface Command
- {
- public function execute();
- }
- class Invoker
- {
- private $_command = array();
- public function setCommand($command) {
- $this->_command[] = $command;
- }
- public function executeCommand()
- {
- foreach($this->_command as $command)
- {
- $command->execute();
- }
- }
- public function removeCommand($command)
- {
- $key = array_search($command, $this->_command);
- if($key !== false)
- {
- unset($this->_command[$key]);
- }
- }
- }
- class Receiver
- {
- private $_name = null;
- public function __construct($name) {
- $this->_name = $name;
- }
- public function action()
- {
- echo $this->_name." action<br/>";
- }
- public function action1()
- {
- echo $this->_name." action1<br/>";
- }
- }
- class ConcreteCommand implements Command
- {
- private $_receiver;
- public function __construct($receiver)
- {
- $this->_receiver = $receiver;
- }
- public function execute()
- {
- $this->_receiver->action();
- }
- }
- class ConcreteCommand1 implements Command
- {
- private $_receiver;
- public function __construct($receiver)
- {
- $this->_receiver = $receiver;
- }
- public function execute()
- {
- $this->_receiver->action1();
- }
- }
- class ConcreteCommand2 implements Command
- {
- private $_receiver;
- public function __construct($receiver)
- {
- $this->_receiver = $receiver;
- }
- public function execute()
- {
- $this->_receiver->action();
- $this->_receiver->action1();
- }
- }
- $objRecevier = new Receiver("No.1");
- $objRecevier1 = new Receiver("No.2");
- $objRecevier2 = new Receiver("No.3");
- $objCommand = new ConcreteCommand($objRecevier);
- $objCommand1 = new ConcreteCommand1($objRecevier);
- $objCommand2 = new ConcreteCommand($objRecevier1);
- $objCommand3 = new ConcreteCommand1($objRecevier1);
- $objCommand4 = new ConcreteCommand2($objRecevier2); // 使用 Recevier的两个方法
- $objInvoker = new Invoker();
- $objInvoker->setCommand($objCommand);
- $objInvoker->setCommand($objCommand1);
- $objInvoker->executeCommand();
- $objInvoker->removeCommand($objCommand1);
- $objInvoker->executeCommand();
- $objInvoker->setCommand($objCommand2);
- $objInvoker->setCommand($objCommand3);
- $objInvoker->setCommand($objCommand4);
- $objInvoker->executeCommand();
php设计模式 Command(命令模式)
2019-11-29 14:54PHP教程网 PHP教程
将一个请求封装为一个对象从而使你可用不同的请求对客户进行参数化,对请求排除或记录请求日志,以及支持可取消的操作
延伸 · 阅读
- 2019-11-29php开发过程中关于继承的使用方法分享
- 2019-11-29php学习笔记 面向对象中[接口]与[多态性]的应用
- 2019-11-29php中session_unset与session_destroy的区别分析
- 2019-11-29不重新编译PHP为php增加openssl模块的方法
- 2019-11-29php的memcached客户端memcached
- 2019-11-29php学习笔记 php中面向对象三大特性之一[封装性
精彩推荐
- PHP教程
PHP使用debug_backtrace方法跟踪调试代码调用详解
这篇文章主要介绍了PHP使用debug_backtrace方法跟踪调试代码调用,结合实例形式详细分析了debug_backtrace函数的功能、参数、使用方法及相关操作注意事项,需要...
- PHP教程
Yii2.0实现的批量更新及批量插入功能示例
这篇文章主要介绍了Yii2.0实现的批量更新及批量插入功能,结合实例形式总结分析了Yii2.0数据库实现数据的批量更新与批量插入功能相关操作技巧,需要的朋...
- PHP教程
PHP计算个人所得税示例【不使用速算扣除数】
这篇文章主要介绍了PHP计算个人所得税,结合实例形式分析了php自定义函数不使用速算扣除数计算个人所得税的相关操作技巧,涉及数组遍历、数值运算的简...
- PHP教程
PHP命名空间namespace及use的简单用法分析
这篇文章主要介绍了PHP命名空间namespace及use的简单用法,结合实例形式分析了php命名空间的功能、使用方法及相关操作注意事项,需要的朋友可以参考下 ...
- PHP教程
Laravel中unique和exists验证规则的优化详解
这篇文章主要给大家介绍了关于Laravel中unique和exists验证规则的优化的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考...
- PHP教程
详解PHP序列化和反序列化原理
本篇文章给大家分享了下PHP反序列化漏洞系列之PHP序列化和反序列化原理的相关知识,有这方面需要的朋友参考学习下吧。 ...
- PHP教程
PHP fclose函数用法总结
我们在本篇文章里给大家整理了关于PHP中fclose函数的详细用法和知识点,需要的朋友们学习下。...
- PHP教程
使用PHPExcel导出Excel表
这篇文章主要为大家详细介绍了使用PHPExcel导出Excel表,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...