命令模式

将一个请求封装为一个对象,从而使用户可用不同的请求对客户进行参数化。对请求排队或记录请求日志,以及支持撤销的操作。

命令模式以松散耦合主题为基础,发送消息、命令和请求,或通过一组处理程序发送任意内容。每个处理程序都会自行判断自己能否处理请求。如果可以,该请求被处理,进程停止。您可以为系统添加或移除处理程序,而不影响其他处理程序。

命令模式的四种角色:

1. 接收者(Receiver)负责执行与请求相关的操作

2. 命令接口(Command)封装execute()、undo()等方法

3. 具体命令(ConcreteCommand)实现命令接口中的方法

4. 请求者(Invoker)包含Command接口变量

interface ICommand {
function onCommand($name, $args);
} class CommandChain {
private $_commands = array();
public function addCommand($cmd) {
$this->_commands []= $cmd;
} public function runCommand($name, $args) {
foreach($this->_commands as $cmd) {
if ($cmd->onCommand($name, $args)) return;
}
}
} class UserCommand implements ICommand {
public function onCommand($name, $args) {
if ($name != 'addUser') return false;
echo("UserCommand handling 'addUser'\n");
return true;
}
} class MailCommand implements ICommand {
public function onCommand($name, $args) {
if ($name != 'mail') return false;
echo("MailCommand handling 'mail'\n");
return true;
}
} $cc = new CommandChain();
$cc->addCommand(new UserCommand());
$cc->addCommand(new MailCommand());
$cc->runCommand('addUser', null);
$cc->runCommand('mail', null);

  

23种模式总览 : https://www.cnblogs.com/houss/p/11121584.html

最新文章

  1. 【原】SDWebImage源码阅读(五)
  2. UWP开发笔记——嵌套式页面的实现
  3. java内存模型-重排序
  4. 《统计推断(Statistical Inference)》读书笔记——第5章 随机样本的性质
  5. photoshop 快速切图
  6. Jenkins进阶系列之——06FTP publisher plugin插件下载(支持绝对路径)
  7. android复习第二天------布局
  8. 编译QT时出现lib/libQtGui.so: undefined reference to `ts_read_raw'的解决办法
  9. UIScreen的 bound、frame、scale属性
  10. 【转】Lua编程规范
  11. Node.js v0.10.31API手冊-控制台
  12. 【玩转开源】制作Docker镜像
  13. [Swift]LeetCode233. 数字1的个数 | Number of Digit One
  14. 1.使用RNN做MNIST分类
  15. 最新的vue没有dev-server.js文件,如何进行后台数据模拟?
  16. postman(二):使用postman发送get or post请求
  17. hadoop伪分布式安装之Linux环境准备
  18. Eclipse:构造函数不提示才发现
  19. 【文文殿下】[AH2017/HNOI2017]礼物
  20. centos7系统下安装配置jdk、tomcat教程

热门文章

  1. AT2400 [ARC072B] Alice&Brown
  2. AT2164 [AGC006C] Rabbit Exercise
  3. 企业级Docker容器镜像仓库Harbor的搭建
  4. MySQL高质量博文链接集合
  5. 通过loganalyzer展示数据库中的日志
  6. 申请Google AdSense联盟(还没有通过)
  7. 安卓手机超频CPU(无修饰CPU控制)
  8. python使用泛型
  9. 我们一起来学grep
  10. 这个杀手不太冷-kill家族