- <?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教程
将一个请求封装为一个对象从而使你可用不同的请求对客户进行参数化,对请求排除或记录请求日志,以及支持可取消的操作
延伸 · 阅读
- 2022-03-10简单谈谈centos7中配置php
- 2022-03-10JavaScript设计模式学习之代理模式
- 2022-03-10JavaScript设计模式之职责链模式
- 2022-03-10JavaScript设计模式之命令模式
- 2022-03-06Ubuntu14.04服务器环境下配置PHP7.0+Apache2+Mysql5.7的方
- 2022-03-05centos yum php 7.x 无需删除升级的方法
- PHP教程
你真的了解PHP中的引用符号(&)吗
php的引用就是在变量或者函数、对象等前面加上&符号,但PHP中的&符号你真的了解吗?真的会用吗?下面随着小编来一起学习学习吧...
- PHP教程
yii框架配置默认controller和action示例
这篇文章主要介绍了yii框架配置默认controller和action示例,需要的朋友可以参考下...
- PHP教程
Yii2实现上下联动下拉框功能的方法
这篇文章主要介绍了Yii2实现上下联动下拉框功能的方法,简单分析了上下联动下拉框功能的概念、原理与实现技巧,需要的朋友可以参考下...
- PHP教程
Thinkphp5框架异常处理操作实例分析
这篇文章主要介绍了Thinkphp5框架异常处理操作,结合实例形式分析了Thinkphp5框架异常处理操作原理、操作方法与相关使用技巧,需要的朋友可以参考下...
- PHP教程
在windows服务器开启php的gd库phpinfo中未发现
在windows服务器开启php的gd库时,使用cgi之后phpinfo()得到的结果中 Configure Command 中并没有出现gd,很是疑惑,于是搜集了一些,希望对你们有帮助,感兴趣的朋...
- PHP教程
PHP 将逗号、空格、回车分隔的字符串转换为数组的函数
我们在搜索一些东西时会经常遇到可以通过空格隔开来达到输入多个条件的目的。今天正好项目中遇到了这个情况,就写了一个函数,将多个条件放到数组...
- PHP教程
解决PHP在DOS命令行下却无法链接MySQL的技术笔记
前段时间,由于要用 php 进行 Shell 编程时,碰到了 PHP 在 WEB 下可以连接 MySQL 而在 DOS COMMAND 命令行下却连接失败的问题。 ...
- PHP教程
php中实现进程锁与多进程的方法
这篇文章给大家介绍了单进程的情况的进程锁实现、进程锁实现多进程、进程锁在yii2中的实现以及杀死进程的命令,有需要的朋友们可以参考借鉴,下面来...