- <?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教程
php实现的支持imagemagick及gd库两种处理的缩略图生成类
这篇文章主要介绍了php实现的支持imagemagick及gd库两种处理的缩略图生成类,包含了用法的详细描述,非常实用,需要的朋友可以参考下...
- PHP教程
PHP中读取文件的8种方法和代码实例
这篇文章主要介绍了PHP中读取文件的8种方法和代码实例,本文总结了PHP中读取文件的8个函数,每一个都附有使用例子及注意事项等,需要的朋友可以参考下...
- PHP教程
PHP常量DIRECTORY_SEPARATOR原理及用法解析
这篇文章主要介绍了PHP常量DIRECTORY_SEPARATOR原理及用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友...
- PHP教程
php全角字符转换为半角函数
这篇文章主要介绍了PHP全角半角转换函数,把目前能找到的所有全角都列出来了一个个替换吧,需要的朋友可以参考下 ...
- PHP教程
php htmlentities()函数的定义和用法
下面小编就为大家带来一篇php htmlentities()函数的定义和用法。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...
- PHP教程
php学习笔记 数组的常用函数
只要一个变量,需要在多个方法使用,就将这个变量声明为成员属性,可以直接在这个对象中的所有方法中使用 成员属性,相当于这个对象中的全局变量...
- PHP教程
PHP变量的定义、可变变量、变量引用、销毁方法
这篇文章主要介绍了PHP变量的定义、可变变量、变量引用、销毁方法,需要的朋友可以参考下 ...