命令模式就和名字一样;

比较适合执行命令的场景;

命令发送者只管调用具体命令类中的 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言相关推荐

  1. java 设计模式 示例_Java设计模式–示例教程

    java 设计模式 示例 Design Patterns are very popular among software developers. A design pattern is a well- ...

  2. 《神探tcpdump第五招》-linux命令五分钟系列之三十九

    == [系列文章] <神探tcpdump第一招>-linux命令五分钟系列之三十五 <神探tcpdump第二招>-linux命令五分钟系列之三十六 <神探tcpdump第 ...

  3. 【OS学习笔记】三十九 保护模式十:中断和异常的处理与抢占式多任务对应的汇编代码----动态加载的用户程序/任务一代码

    本文是以下几篇文章对应的动态加载的用户程序/任务一代码: [OS学习笔记]三十四 保护模式十:中断和异常区别 [OS学习笔记]三十五 保护模式十:中断描述符表.中断门和陷阱门 [OS学习笔记]三十六 ...

  4. 【OS学习笔记】二十九 保护模式八:任务切换对应的汇编代码之用户程序代码

    本汇编代码对应以下两篇文章对应的用户程序汇编代码: [OS学习笔记]二十六 保护模式八:任务门-任务切换 [OS学习笔记]二十七 保护模式八:任务切换的方法之----jmp与call的区别以及任务的中 ...

  5. matlab插值与拟合(命令与示例),matlab插值与拟合(命令与示例)

    目录 [一维插值]interp1.................................................................................... ...

  6. linux mv移动文件到指定目录,Linux mv命令使用示例-移动或重命令文件/目录

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? mv命令和cp命令类似,但是它不复制文件/目录.这个命令默认安装在Linux系统中,不管你使用的什么发型版.下面列举了m ...

  7. 【OS学习笔记】十九 保护模式六:保户模式下操作系统内核如何加载用户程序并运行

    上一篇文章学习了保户模式下如何进行内存保护 与 别名段的意义与作用:点击链接查看上一篇文章:点击链接 本文接着学习,在保护模式下,内核是如何加载用户程序并运行的.其实这与在实模式下很像,只不过现在保护 ...

  8. Java设计模式 - 示例教程

    Java设计模式 - 示例教程 设计模式在软件开发人员中非常流行.设计模式是针对常见软件问题的良好描述的解决方案.我已经写了很多关于java设计模式的文章.您可以订阅我们的时事通讯下载PDF电子书(1 ...

  9. 第三十九章 SQL命令 DROP TRIGGER

    文章目录 第三十九章 SQL命令 DROP TRIGGER 大纲 参数 描述 FROM 子句 示例 第三十九章 SQL命令 DROP TRIGGER 删除触发器 大纲 DROP TRIGGER nam ...

最新文章

  1. jump-server 安装部署
  2. Microsoft CryptoAPI加密技术(一)
  3. #define typedef 区别
  4. 最全目标检测相关资料整理 (目标检测+数据增强+卷价神经网络+类别不均衡...)
  5. 五个 SQL 查询性能测试题,只有 40% 及格率,你敢来挑战吗?
  6. 伪标记是一种简单的半监督学习方法
  7. bps与bit/s和Bps与buad/s
  8. 微软 .NET 团队宣布 Visual Basic 停止更新,VB 编程即将谢幕
  9. Matlab绘制直方图,横坐标间设置等间距的空格
  10. Matlab:i 和j其实是MATLAB内置函数(built-in function)
  11. SAP中的贷项凭证、借项凭证
  12. 从“大恐怖”展望AI未来,未来人类会好吗?
  13. 开年第一炸:黑马程序员1月就业报告新鲜出炉!
  14. 关闭/开启“此电脑”左边的导航栏win10
  15. Matterport3D:室内环境RGB-D数据的深度学习
  16. linux中pid gid tgid tid的区别和联系
  17. python云计算1
  18. CPU占用率百分百原因及解决方法
  19. 枚举类与注解(复习)
  20. [HTML]入门小知识,列表?框架?表格?来吧。纯手工制作,满满都是智慧

热门文章

  1. struts入门的ognl
  2. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 辅助类:在元素获取焦点时显示(如:键盘操作的用户)...
  3. mybatis与hibernate不同(重要)
  4. 关于Django ORM filter方法小结
  5. DotNetOpenAuth实践之Webform资源服务器配置
  6. DB层面上的设计 分库分表 读写分离 集群化 负载均衡
  7. 生产环境nginx平滑升级
  8. 2010年11月8日,早会资料(日本的文化节)。
  9. 奥威软件大数据bi_哪家BI软件能做Sql server的数据可视化分析?
  10. AntV 数据可视化解决方案发布