博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Command_命令模式_PHP语言描述
阅读量:6906 次
发布时间:2019-06-27

本文共 2295 字,大约阅读时间需要 7 分钟。

hot3.png

"; } } //厨师对象,做冷菜 class CoolCook implements cookApi{ public function cook($name){ echo "冷菜厨师正在做:".$name."
"; } } //命令接口 interface Command{ public function execute(); } //具体的命令对象,需持有相应的具体处理事务的类实例。这里咱们做三个命令对象,即菜品"绿豆排骨煲"、"北京烤鸭"、"蒜泥白肉(凉菜)" class ChopCommand implements Command{ //持有具体的厨师对象 private $cookApi = NULL; //设置具体的厨师对象 public function setCookApi($cookApi){ $this->cookApi = $cookApi; } public function execute(){ $this->cookApi->cook("绿豆排骨煲"); } } class DuckCommand implements Command{ //持有具体的厨师对象 private $cookApi = NULL; //设置具体的厨师对象 public function setCookApi($cookApi){ $this->cookApi = $cookApi; } public function execute(){ $this->cookApi->cook("北京烤鸭"); } } class PorkCommand implements Command{ //持有具体的厨师对象 private $cookApi = NULL; //设置具体的厨师对象 public function setCookApi($cookApi){ $this->cookApi = $cookApi; } public function execute(){ $this->cookApi->cook("蒜泥白肉"); } } //菜单对象,是一个宏命令对象,宏命令顾名思义就是一组命令的集合,当执行宏命令时,需要依次执行所有的命令 class MenuCommand implements Command{ private $commandArr = array(); //点菜,把菜品加入到点菜单中 public function addCommand($command){ array_push($this->commandArr, $command); } //执行菜单命令 public function execute(){ foreach ($this->commandArr as $key => $value) { $this->commandArr[$key]->execute(); } } } /* * 服务员类,负责组合菜单,负责组装每个菜和具体的实现者即厨师 * 还负责执行调用,相当于标准Command模式的Client+Invoker */ class Waiter{ //持有一个菜单对象,即宏命令对象 private $menuCommand; public function __construct(){ $this->menuCommand = new MenuCommand(); } public function orderDish($cmd){ //客户传过来的命令对象是没有和接受者组装的 //在这里组装,因为客户并不知道他点的菜是谁来做,凉菜热菜是否不是一个人做,这些都不是客户应该关心的。 $hotCook = new HotCook(); $cookCook = new CoolCook(); if($cmd instanceof DuckCommand){ $cmd->setCookApi($hotCook); } else if($cmd instanceof ChopCommand){ $cmd->setCookApi($hotCook); } else if($cmd instanceof PorkCommand){ $cmd->setCookApi($cookCook); } $this->menuCommand->addCommand($cmd); } public function orderOver(){ $this->menuCommand->execute(); } } $waiter = new Waiter(); $chop = new ChopCommand(); $duck = new DuckCommand(); $pork = new PorkCommand(); $waiter->orderDish($chop); $waiter->orderDish($duck); $waiter->orderDish($pork); $waiter->orderOver(); ?>

转载于:https://my.oschina.net/cniiliuqi/blog/64214

你可能感兴趣的文章
Linux中~/.是什么意思
查看>>
MySql-Binlog协议详解-流程篇
查看>>
Effective Java 学习笔记(第57条:只针对异常的情况才使用异常)
查看>>
Simple-Spring-Memcached深入研究一
查看>>
大话JS神器之Promise
查看>>
网页适配之强制网页适配手机屏幕
查看>>
ThinkPHP2.2 任意代码执行漏洞 利用
查看>>
期年之痒
查看>>
cpanm perl模块自动安装
查看>>
深入讲解BGP协议synchronous原理
查看>>
简要总结最近遇到的5个问题
查看>>
中国象棋程序的设计与实现(七)--心得体会和开发日志
查看>>
浅显理解 Python 闭包
查看>>
学习Oracle分析函数(Analytic Functions)
查看>>
openstack学习笔记二 网络设置基础
查看>>
RabbitMQ基础
查看>>
有了安全边界,人工智能才能有序发展
查看>>
Qt在mainwindow下代码添加控件不能显示的问题
查看>>
【cocos2dx】使用VS插件在VS2012/2013上编辑和调试Quick-Cocos2d-x的Lua代码
查看>>
Centos6.0之pptpd+mysql+freeradius实现***帐号统一认证管理
查看>>