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 相关文章推荐
优化NFR之一 --MSSQL Hello Buffer Overflow
Oct 09 PHP
PHP中for与foreach的区别分析
Mar 09 PHP
PHP 代码规范小结
Mar 08 PHP
用C/C++扩展你的PHP 为你的php增加功能
Sep 06 PHP
php配置php-fpm启动参数及配置详解
Nov 04 PHP
带密匙的php加密解密示例分享
Jan 29 PHP
php中stdClass的用法分析
Feb 27 PHP
php函数实现判断是否移动端访问
Mar 03 PHP
PHP 输出缓冲控制(Output Control)详解
Aug 25 PHP
详解php中 === 的使用
Oct 24 PHP
PHP守护进程化在C和PHP环境下的实现
Nov 21 PHP
使用Git实现Laravel项目的自动化部署
Nov 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
Terran剧情介绍
2020/03/14 星际争霸
DEDE采集大师官方留后门的删除办法
2011/01/08 PHP
PHP得到某段时间区间的时间戳 php定时任务
2012/04/12 PHP
5种PHP创建数组的实例代码分享
2014/01/17 PHP
详细解读PHP中接口的应用
2015/08/12 PHP
PHP读取、解析eml文件及生成网页的方法示例
2017/09/04 PHP
laravel实现分页样式替换示例代码(增加首、尾页)
2017/09/22 PHP
JQuery中的$.getJSON 使用说明
2011/03/10 Javascript
深入理解JavaScript系列(8) S.O.L.I.D五大原则之里氏替换原则LSP
2012/01/15 Javascript
jQuery $.each遍历对象、数组用法实例
2015/04/16 Javascript
JavaScript构造函数详解
2015/12/27 Javascript
ajax在兼容模式下失效的快速解决方法
2016/03/22 Javascript
Jquery操作cookie记住用户名
2016/03/29 Javascript
JavaScript实现时钟滴答声效果
2017/01/29 Javascript
jQuery实现弹幕效果
2017/02/17 Javascript
NodeJS安装图文教程
2018/04/19 NodeJs
JavaScript递归函数解“汉诺塔”算法代码解析
2018/07/05 Javascript
浅谈Vue.use的使用
2018/08/29 Javascript
关于Vue源码vm.$watch()内部原理详解
2019/04/26 Javascript
详解vue beforeRouteEnter 异步获取数据给实例问题
2019/08/09 Javascript
element-ui 文件上传修改文件名的方法示例
2019/11/05 Javascript
vue中渲染对象中属性时显示未定义的解决
2020/07/31 Javascript
微信小程序实现简单的select下拉框
2020/11/23 Javascript
Python的函数嵌套的使用方法
2014/01/24 Python
python3模拟百度登录并实现百度贴吧签到示例分享(百度贴吧自动签到)
2014/02/24 Python
python实现微信远程控制电脑
2018/02/22 Python
python实现两个文件合并功能
2018/04/01 Python
python matplotlib绘图,修改坐标轴刻度为文字的实例
2018/05/25 Python
在Pandas中DataFrame数据合并,连接(concat,merge,join)的实例
2019/01/29 Python
Numpy之random函数使用学习
2019/01/29 Python
使用python实现时间序列白噪声检验方式
2020/06/03 Python
Python用摘要算法生成token及检验token的示例代码
2020/12/01 Python
美国一家全面的在线零售鞋类公司:SHOEBACCA
2017/01/06 全球购物
小学生感恩父母演讲稿
2014/08/28 职场文书
行政申诉状范文
2015/05/20 职场文书
MySQL系列之十五 MySQL常用配置和性能压力测试
2021/07/02 MySQL