php设计模式 Command(命令模式)


Posted in PHP onJune 26, 2011
<?php 
/** 
* 命令模式 
* 
* 将一个请求封装为一个对象从而使你可用不同的请求对客户进行参数化,对请求排除或记录请求日志,以及支持可取消的操作 
*/ 
interface Command 
{ 
public function execute(); 
} class Invoker 
{ 
private $_command = array(); 
public function setCommand($command) { 
$this->_command[] = $command; 
} 
public function executeCommand() 
{ 
foreach($this->_command as $command) 
{ 
$command->execute(); 
} 
} 
public function removeCommand($command) 
{ 
$key = array_search($command, $this->_command); 
if($key !== false) 
{ 
unset($this->_command[$key]); 
} 
} 
} 
class Receiver 
{ 
private $_name = null; 
public function __construct($name) { 
$this->_name = $name; 
} 
public function action() 
{ 
echo $this->_name." action<br/>"; 
} 
public function action1() 
{ 
echo $this->_name." action1<br/>"; 
} 
} 
class ConcreteCommand implements Command 
{ 
private $_receiver; 
public function __construct($receiver) 
{ 
$this->_receiver = $receiver; 
} 
public function execute() 
{ 
$this->_receiver->action(); 
} 
} 
class ConcreteCommand1 implements Command 
{ 
private $_receiver; 
public function __construct($receiver) 
{ 
$this->_receiver = $receiver; 
} 
public function execute() 
{ 
$this->_receiver->action1(); 
} 
} 
class ConcreteCommand2 implements Command 
{ 
private $_receiver; 
public function __construct($receiver) 
{ 
$this->_receiver = $receiver; 
} 
public function execute() 
{ 
$this->_receiver->action(); 
$this->_receiver->action1(); 
} 
} 

$objRecevier = new Receiver("No.1"); 
$objRecevier1 = new Receiver("No.2"); 
$objRecevier2 = new Receiver("No.3"); 
$objCommand = new ConcreteCommand($objRecevier); 
$objCommand1 = new ConcreteCommand1($objRecevier); 
$objCommand2 = new ConcreteCommand($objRecevier1); 
$objCommand3 = new ConcreteCommand1($objRecevier1); 
$objCommand4 = new ConcreteCommand2($objRecevier2); // 使用 Recevier的两个方法 
$objInvoker = new Invoker(); 
$objInvoker->setCommand($objCommand); 
$objInvoker->setCommand($objCommand1); 
$objInvoker->executeCommand(); 
$objInvoker->removeCommand($objCommand1); 
$objInvoker->executeCommand(); 
$objInvoker->setCommand($objCommand2); 
$objInvoker->setCommand($objCommand3); 
$objInvoker->setCommand($objCommand4); 
$objInvoker->executeCommand();
PHP 相关文章推荐
WHOIS类的修改版
Oct 09 PHP
php读取数据库信息的几种方法
May 24 PHP
php 常用算法和时间复杂度
Jul 01 PHP
PHP的反射类ReflectionClass、ReflectionMethod使用实例
Aug 05 PHP
PHP实现的sqlite数据库连接类
Dec 12 PHP
php+mysql数据库查询实例
Jan 21 PHP
浅谈PHP中的数据传输CURL
Sep 06 PHP
php-beanstalkd消息队列类实例分享
Jul 19 PHP
Laravel中使用Queue的最基本操作教程
Dec 27 PHP
thinkPHP实现基于ajax的评论回复功能
Jun 22 PHP
php微信公众号开发之校园图书馆
Oct 20 PHP
php下的原生ajax请求用法实例分析
Feb 28 PHP
php设计模式 Template (模板模式)
Jun 26 #PHP
php设计模式 Proxy (代理模式)
Jun 26 #PHP
php设计模式 Composite (组合模式)
Jun 26 #PHP
php设计模式 State (状态模式)
Jun 26 #PHP
php设计模式 Bridge (桥接模式)
Jun 26 #PHP
php设计模式 Chain Of Responsibility (职责链模式)
Jun 26 #PHP
php设计模式 FlyWeight (享元模式)
Jun 26 #PHP
You might like
日本收入最高的漫画家:海贼王作者版税年收入高达8.45亿元
2020/03/04 日漫
欧美媒体选出10年前最流行的17部动画
2017/01/18 日漫
一棵php的类树(支持无限分类)
2006/10/09 PHP
什么是MVC,好东西啊
2007/05/03 PHP
基于php缓存的详解
2013/05/15 PHP
php生成随机数的三种方法
2014/09/10 PHP
ThinkPHP中使用Ueditor富文本编辑器
2015/09/02 PHP
利用PHP获取汉字首字母并且分组排序详解
2017/10/22 PHP
PHP 计算两个时间段之间交集的天数示例
2019/10/24 PHP
jquery设置text的值示例(设置文本框 DIV 表单值)
2014/01/06 Javascript
js时间日期格式化封装函数
2014/12/02 Javascript
jQuery中(function($){})(jQuery)详解
2015/07/15 Javascript
jQuery实现的漂亮表单效果代码
2015/08/18 Javascript
Angular 路由route实例代码
2016/07/12 Javascript
Angularjs的ng-repeat中去除重复数据的方法
2016/08/05 Javascript
AngularJS辅助库browserTrigger用法示例
2016/11/03 Javascript
javascript 跨域问题以及解决办法
2017/07/17 Javascript
微信小程序显示倒计时功能示例【测试可用】
2018/12/03 Javascript
Javascript Dom元素获取和添加详解
2019/09/24 Javascript
Layui实现数据表格默认全部显示(不要分页)
2019/10/26 Javascript
js实现登录拖拽窗口
2020/02/10 Javascript
jQuery实现倒计时功能完整示例
2020/06/01 jQuery
[05:56]第十六期——新进3大C之小兔基
2014/06/24 DOTA
pycharm 使用心得(二)设置字体大小
2014/06/05 Python
python中的__slots__使用示例
2015/02/26 Python
python将处理好的图像保存到指定目录下的方法
2019/01/10 Python
Python高级特性 切片 迭代解析
2019/08/23 Python
python+OpenCV实现车牌号码识别
2019/11/08 Python
python selenium操作cookie的实现
2020/03/18 Python
Python+Django+MySQL实现基于Web版的增删改查的示例代码
2020/05/13 Python
基于canvas的骨骼动画的示例代码
2018/06/12 HTML / CSS
通过canvas转换颜色为RGBA格式及性能问题的解决
2019/11/22 HTML / CSS
CAT鞋美国官网:CAT Footwear
2017/11/27 全球购物
我们没有写servlet的构造方法,那么容器是怎么创建servlet的实例呢
2013/04/24 面试题
2015年党员自评材料
2014/12/17 职场文书
win10壁纸在哪个文件夹 win10桌面背景图片文件位置分享
2022/08/05 数码科技