php 命令设计模式示例,php设计模式(十九)命令模式-Fun言
命令模式就和名字一样;
比较适合执行命令的场景;
命令发送者只管调用具体命令类中的 execute() 方法;
然后在具体命令类中设定命令接收者;
可以消除命令发送者和命令接受者之间的耦合;
并且可以方便的扩展新命令;
结构
CommandInterface:命令抽象类;一般会暴露一个 execute 方法;
Command:具体的命令类;设定接收者;
Invoker:命令发送者;用于调用命令;
Receiver: 命令接收者;负责执行操作;
示例
CommandInterface.php
namespace Baijunyao\DesignPatterns\Command;
/**
* Interface CommandInterface
*
* @package Baijunyao\DesignPatterns\Command
*/
interface CommandInterface
{
/**
* @return mixed
*/
public function execute();
}
具体的命令类;
Command.php
namespace Baijunyao\DesignPatterns\Command;
/**
* 具体命令类
*
* @package Baijunyao\DesignPatterns\Command
*/
class Command implements CommandInterface
{
/**
* @var \Baijunyao\DesignPatterns\Command\Receiver
*/
protected $receiver;
/**
* Command constructor.
*
* @param \Baijunyao\DesignPatterns\Command\Receiver $receiver
*/
public function __construct(Receiver $receiver)
{
$this->receiver = $receiver;
}
/**
* @return mixed|void
*/
public function execute()
{
$this->receiver->action();
}
}
命令发送者
namespace Baijunyao\DesignPatterns\Command;
/**
* 命令发送者
*
* @package Baijunyao\DesignPatterns\Command
*/
class Invoker
{
/**
* @var
*/
protected $command;
/**
* @param \Baijunyao\DesignPatterns\Command\Command $command
*/
public function setCommand(Command $command)
{
$this->command = $command;
}
/**
* 执行
*/
public function run()
{
$this->command->execute();
}
}
命令接受者
namespace Baijunyao\DesignPatterns\Command;
/**
* 命令接收者
*
* @package Baijunyao\DesignPatterns\Command
*/
class Receiver
{
/**
* 执行操作
*/
public function action()
{
echo '执行操作';
}
}
运行;
index.php
namespace Baijunyao\DesignPatterns\Command;
require __DIR__.'/../vendor/autoload.php';
/**
* 客户端
*
* Class Client
* @package Baijunyao\DesignPatterns\Command
*/
class Client
{
/**
* 运行
*/
public function run()
{
// 命令行类设定接受者
$receiver = new Receiver();
$command = new Command($receiver);
// 命令接受者调用命令
$invoker = new Invoker();
$invoker->setCommand($command);
$invoker->run();
}
}
$client = new Client();
$client->run();
但是正如代码所示;
本来只是要执行一个方法;
却分成了3个类显的略微繁琐;
php 命令设计模式示例,php设计模式(十九)命令模式-Fun言相关推荐
- java 设计模式 示例_Java设计模式–示例教程
java 设计模式 示例 Design Patterns are very popular among software developers. A design pattern is a well- ...
- 《神探tcpdump第五招》-linux命令五分钟系列之三十九
== [系列文章] <神探tcpdump第一招>-linux命令五分钟系列之三十五 <神探tcpdump第二招>-linux命令五分钟系列之三十六 <神探tcpdump第 ...
- 【OS学习笔记】三十九 保护模式十:中断和异常的处理与抢占式多任务对应的汇编代码----动态加载的用户程序/任务一代码
本文是以下几篇文章对应的动态加载的用户程序/任务一代码: [OS学习笔记]三十四 保护模式十:中断和异常区别 [OS学习笔记]三十五 保护模式十:中断描述符表.中断门和陷阱门 [OS学习笔记]三十六 ...
- 【OS学习笔记】二十九 保护模式八:任务切换对应的汇编代码之用户程序代码
本汇编代码对应以下两篇文章对应的用户程序汇编代码: [OS学习笔记]二十六 保护模式八:任务门-任务切换 [OS学习笔记]二十七 保护模式八:任务切换的方法之----jmp与call的区别以及任务的中 ...
- matlab插值与拟合(命令与示例),matlab插值与拟合(命令与示例)
目录 [一维插值]interp1.................................................................................... ...
- linux mv移动文件到指定目录,Linux mv命令使用示例-移动或重命令文件/目录
8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? mv命令和cp命令类似,但是它不复制文件/目录.这个命令默认安装在Linux系统中,不管你使用的什么发型版.下面列举了m ...
- 【OS学习笔记】十九 保护模式六:保户模式下操作系统内核如何加载用户程序并运行
上一篇文章学习了保户模式下如何进行内存保护 与 别名段的意义与作用:点击链接查看上一篇文章:点击链接 本文接着学习,在保护模式下,内核是如何加载用户程序并运行的.其实这与在实模式下很像,只不过现在保护 ...
- Java设计模式 - 示例教程
Java设计模式 - 示例教程 设计模式在软件开发人员中非常流行.设计模式是针对常见软件问题的良好描述的解决方案.我已经写了很多关于java设计模式的文章.您可以订阅我们的时事通讯下载PDF电子书(1 ...
- 第三十九章 SQL命令 DROP TRIGGER
文章目录 第三十九章 SQL命令 DROP TRIGGER 大纲 参数 描述 FROM 子句 示例 第三十九章 SQL命令 DROP TRIGGER 删除触发器 大纲 DROP TRIGGER nam ...
最新文章
- jump-server 安装部署
- Microsoft CryptoAPI加密技术(一)
- #define typedef 区别
- 最全目标检测相关资料整理 (目标检测+数据增强+卷价神经网络+类别不均衡...)
- 五个 SQL 查询性能测试题,只有 40% 及格率,你敢来挑战吗?
- 伪标记是一种简单的半监督学习方法
- bps与bit/s和Bps与buad/s
- 微软 .NET 团队宣布 Visual Basic 停止更新,VB 编程即将谢幕
- Matlab绘制直方图,横坐标间设置等间距的空格
- Matlab:i 和j其实是MATLAB内置函数(built-in function)
- SAP中的贷项凭证、借项凭证
- 从“大恐怖”展望AI未来,未来人类会好吗?
- 开年第一炸:黑马程序员1月就业报告新鲜出炉!
- 关闭/开启“此电脑”左边的导航栏win10
- Matterport3D:室内环境RGB-D数据的深度学习
- linux中pid gid tgid tid的区别和联系
- python云计算1
- CPU占用率百分百原因及解决方法
- 枚举类与注解(复习)
- [HTML]入门小知识,列表?框架?表格?来吧。纯手工制作,满满都是智慧
热门文章
- struts入门的ognl
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 辅助类:在元素获取焦点时显示(如:键盘操作的用户)...
- mybatis与hibernate不同(重要)
- 关于Django ORM filter方法小结
- DotNetOpenAuth实践之Webform资源服务器配置
- DB层面上的设计 分库分表 读写分离 集群化 负载均衡
- 生产环境nginx平滑升级
- 2010年11月8日,早会资料(日本的文化节)。
- 奥威软件大数据bi_哪家BI软件能做Sql server的数据可视化分析?
- AntV 数据可视化解决方案发布