<?php
/** 命令模式:(行为模式)将一个请求封装成一个对象(命令封装成对象),从而可以使用不同的请求对客户参数化(客户的不同请求,调不同的封装对象),* 对请求排序,或者记录请求日志,以及支持可取消的操作* 1 命令接口:声明执行方法2 发起者 : 记录、撤销请求,请求命令执行3 接受者 : 命令的具体实现角色。4 具体命令: 包含接受者,调用接受者执行。*///具体做事情的角色,接受者
class Receiver{public $name;public function __construct($name){$this->name = $name;}public function action(){echo $this->name.'跳大';}public function action1(){echo $this->name.'防御';}public function action2(){echo $this->name.'治疗';}
}//命令接口
interface Command{public function execute();
}//具体的三个命令,包含一个接受者,调用接受者去做
class Command1 implements Command{public $receiver;public function __construct($receiver){$this->receiver = $receiver;}public function execute(){$this->receiver->action();}
}class Command2 implements Command{public $receiver;public function __construct($receiver){$this->receiver = $receiver;}public function execute(){$this->receiver->action1();}
}class Command3 implements Command{public $receiver;public function __construct($receiver){$this->receiver = $receiver;}public function execute(){$this->receiver->action2();}
}//命令发起者,记录,删除命令,请求执行命令
class Invoker{public $command = array();public function setCommand($command){$this->command[] = $command;}public function executeCommand(){//请求执行foreach ($this->command as $key=>$value){$value->execute();echo "<br/>";}}public function removeCommand($command){$key = array_search($command, $this->command);if($key!==false){unset($this->command[$key]);}}
}/** 请求流程:先实例化接受者(具体做事的角色),然后实例化命令。* 接着实例化一个请求者,请求者注册命令,请求执行命令*/
$role1 = new Receiver('盖伦');
$role2 = new Receiver('皇子');$command1 = new Command1($role2);
$command2 = new Command2($role1);$invoker = new Invoker();
$invoker->setCommand($command1);
$invoker->setCommand($command2);$invoker->executeCommand();
?>

  

转载于:https://www.cnblogs.com/taijun/p/4078402.html

php实现设计模式之 命令模式相关推荐

  1. 设计模式 之 命令模式

    2019独角兽企业重金招聘Python工程师标准>>> 设计模式 之 命令模式 命令模式比较简单,不过多赘述 为什么需要命令模式 将"行为请求者"与"行 ...

  2. 乐在其中设计模式(C#) - 命令模式(Command Pattern)

    原文:乐在其中设计模式(C#) - 命令模式(Command Pattern) [索引页] [源码下载] 乐在其中设计模式(C#) - 命令模式(Command Pattern) 作者:webabcd ...

  3. 23种设计模式之命令模式和策略模式的区别

    文章目录 概述 命令模式 策略模式 相同点 总结 概述 命令模式和策略模式确实很相似,只是命令模式多了一个接收者(Receiver)角色.它们虽然同为行为类模式,但是两者的区别还是很明显的.策略模式的 ...

  4. 设计模式之命令模式(Command)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  5. plsql执行command命令控制台出现乱码_设计模式系列 — 命令模式

    点赞再看,养成习惯,公众号搜一搜[一角钱技术]关注更多原创技术文章.本文 GitHub org_hejianhui/JavaStudy 已收录,有我的系列文章. 前言 23种设计模式速记 单例(sin ...

  6. 设计模式复习-命令模式

    #pragma once #include "stdafx.h" #include<set> #include<string> #include<io ...

  7. Java 设计模式之命令模式

    一.了解命令模式 1.1 什么是命令模式 命令模式将"请求"封装成对象,以便使用不同的请求.队列或者日志来参数化其他对象.命令模式也支持可撤销的操作.这种说法比较难以理解,换种说法 ...

  8. 设计模式:命令模式(Command)

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

  9. 【设计模式】命令模式

    命令模式:将请求封装在对象中,客户不直接调用某个对象的方法,而是使用命令,将命令传递给拥有方法的对象从而让某一方法被调用.UML图例如以下: 以下是用C++描写的命令模式的一个简单样例: #inclu ...

  10. Android设计模式之——命令模式

    一.介绍 命令模式(Command Pattern),是行为型设计模式之一.命令模式相对于其他的设计模式来说并没有那么多的条条框框,其实它不是一个很"规范"的模式,不过,就是基于这 ...

最新文章

  1. 一个合格程序员该做的事情
  2. XHTML 结构化:使用 XHTML 重构网站
  3. java基础系列:集合总结(5)
  4. jmeter异步请求测试_使用JMeter对异步HTTP / REST服务进行压力/负载测试
  5. [leetcode]143. Reorder List
  6. c++ primer plus(第6版)中文版 第十二章编程练习答案
  7. 数车计算机编程教学caxa,caxa数控车视频教程软件编程全套2016/2015
  8. 如何将wav转为mp3格式,wav中间mp3步骤
  9. 计算机的音量找不到了,win7旗舰版64位系统右下角音量小喇叭图标不见了怎么找回...
  10. 利用计算机发现了DNA,DNA计算机阅读答案
  11. webshell检测方式深度剖析---RASP(taint扩展)
  12. kettle定时备份->mysql+mongoDB增量备份
  13. windows下安装Python和安装Python解释器
  14. 访问网站浏览器左上角提示:windows 没有足够信息,不能验证该证书
  15. 有时候来不及去菜场,我就会给多头绒泡菌叫外卖,它真的很喜欢吃平菇 | 曳尾菌 一席第719位讲者...
  16. 【ntp】Linux Windows时间服务器NTP配置
  17. python编写hello程序_python第一个程序“Hello, world”
  18. ubuntu安装FreeSurfer,注册获得license时显示Error reCAPTCHA not checked的解决方法
  19. 《空气动力学》——第一章 空气动力学引述
  20. 一 自学软件编程前可能你想了解的问题

热门文章

  1. AI实战:基于AdvancedEAST的自然场景图像文本检测算法
  2. indes.php默认文件,linux-php的编译安装3
  3. python是什么时候出现的_python诞生于什么时候
  4. 获取python安装路径
  5. 如何制作一款HTML5 RPG游戏引擎——第三篇,利用幕布切换场景
  6. 傅立叶变换,时域,频域二
  7. paypal如何支付欧元_做印度最好的第三方四方支付网关-在线业务源码服务wefreepay一网打尽...
  8. coreldraw水涟漪怎么做_不懂怎么挑选水处理设备?跟贝斯沃了解这3点再做决定,轻松挑出适合自己的...
  9. Wireshark 抓包小例子
  10. 深入理解Java面向对象三大特性 封装 继承 多态