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 相关文章推荐
消息持续发送的完整例子
Oct 09 PHP
PHP开发需要注意的安全问题
Sep 01 PHP
php表单转换textarea换行符的方法
Sep 10 PHP
PHP运行模式的深入理解
Jun 03 PHP
解析ajax事件的调用顺序
Jun 17 PHP
ThinkPHP CURD方法之field方法详解
Jun 18 PHP
destoon实现调用热门关键字的方法
Jul 15 PHP
php数组使用规则分析
Feb 27 PHP
PHP实现批量重命名某个文件夹下所有文件的方法
Sep 04 PHP
php封装db类连接sqlite3数据库的方法实例
Dec 19 PHP
thinkPHP5.1框架中Request类四种调用方式示例
Aug 03 PHP
laravel5.1 ajax post 传值_token示例
Oct 24 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
Apache, PHP在Windows 9x/NT下的安装与配置 (二)
2006/10/09 PHP
php 数组使用详解 推荐
2011/06/02 PHP
浅析php与数据库代码开发规范
2013/08/08 PHP
zf框架的数据库追踪器使用示例
2014/03/13 PHP
Ubuntu中启用php的mail()函数并解决发送邮件速度慢问题
2015/03/27 PHP
php实现水印文字和缩略图的方法示例
2016/12/29 PHP
PHP使用ajax的post方式下载excel文件简单示例
2019/08/06 PHP
拥抱模块化的JavaScript
2012/03/07 Javascript
jQuery.extend()的实现方式详解及实例
2013/06/29 Javascript
JS简单计算器实例
2015/01/20 Javascript
javascript实现控制div颜色
2015/07/07 Javascript
js使用cookie记录用户名的方法
2015/11/26 Javascript
js简单正则验证汉字英文及下划线的方法
2016/11/28 Javascript
Bootstrap显示与隐藏简单实现代码
2017/03/06 Javascript
详解微信小程序 通过控制CSS实现view隐藏与显示
2017/05/24 Javascript
vue组件watch属性实例讲解
2017/11/07 Javascript
Nodejs调用Dll模块的方法
2018/09/17 NodeJs
3分钟读懂移动端rem使用方法(推荐)
2019/05/06 Javascript
基于html+css+js实现简易计算器代码实例
2020/02/28 Javascript
JS实现数据动态渲染的竖向步骤条
2020/06/24 Javascript
[01:05:36]VP vs TNC Supermajor小组赛B组 BO3 第二场 6.2
2018/06/03 DOTA
Python错误提示:[Errno 24] Too many open files的分析与解决
2017/02/16 Python
Python字典及字典基本操作方法详解
2018/01/30 Python
python中的文件打开与关闭操作命令介绍
2018/04/26 Python
对python中Json与object转化的方法详解
2018/12/31 Python
python 如何利用argparse解析命令行参数
2020/09/11 Python
Stutterheim瑞典:瑞典高级外套时装品牌
2019/06/24 全球购物
navabi英国:设计师大码女装
2019/06/25 全球购物
质检员岗位职责
2013/12/17 职场文书
优秀辅导员事迹材料
2014/02/16 职场文书
2014年作风建设工作总结
2014/10/29 职场文书
小学中等生评语
2014/12/29 职场文书
导游词之茶卡盐湖
2019/11/26 职场文书
为什么在foreach循环中JAVA集合不能添加或删除元素
2021/06/11 Java/Android
MySQL REVOKE实现删除用户权限
2021/06/18 MySQL
MySQL中一条update语句是如何执行的
2022/03/16 MySQL