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 相关文章推荐
PHP.MVC的模板标签系统(五)
Sep 05 PHP
用PHP实现验证码功能
Oct 09 PHP
php 执行系统命令的方法
Jul 07 PHP
php+memcache实现的网站在线人数统计代码
Jul 04 PHP
php实现阿拉伯数字和罗马数字相互转换的方法
Apr 17 PHP
判断、添加和删除WordPress置顶文章的相关PHP函数小结
Dec 10 PHP
PHP函数shuffle()取数组若干个随机元素的方法分析
Apr 02 PHP
eclipse php wamp配置教程
Jun 30 PHP
Yii2增删改查之查询 where参数详细介绍
Aug 08 PHP
php把时间戳转换成多少时间之前函数的实例
Nov 16 PHP
老生常谈php 正则中的i,m,s,x,e分别表示什么
Mar 02 PHP
php5.6.x到php7.0.x特性小结
Aug 17 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
zf框架的zend_cache缓存使用方法(zend框架)
2014/03/14 PHP
wordpress自定义标签云与随机获取标签的方法详解
2019/03/22 PHP
javascript读取RSS数据
2007/01/20 Javascript
jquery Firefox3.5中操作select的问题
2009/07/10 Javascript
jquery ajax提交整个表单元素的快捷办法
2013/03/27 Javascript
form表单只提交数据而不进行页面跳转的解决方案
2013/09/18 Javascript
多种方法判断Javascript对象是否存在
2013/09/22 Javascript
jQuery+CSS3实现树叶飘落特效
2015/02/01 Javascript
jQuery设置和移除文本框默认值的方法
2015/03/09 Javascript
使用JS批量选中功能实现更改数据库中的status状态值(批量展示)
2016/11/22 Javascript
微信小程序开发之实现选项卡(窗口顶部TabBar)页面切换
2016/11/25 Javascript
JS中事件冒泡和事件捕获介绍
2016/12/13 Javascript
微信小程序图片宽100%显示并且不变形
2017/06/21 Javascript
jQuery plugin animsition使用小结
2017/09/14 jQuery
微信小程序实现简单input正则表达式验证功能示例
2017/11/30 Javascript
微信小程序日历效果
2018/12/29 Javascript
js贪心算法 钱币找零问题代码实例
2019/09/11 Javascript
uniapp实现可以左右滑动导航栏
2020/10/21 Javascript
初学python数组的处理代码
2011/01/04 Python
pandas DataFrame 根据多列的值做判断,生成新的列值实例
2018/05/18 Python
python实现图片转字符小工具
2019/04/30 Python
python和mysql交互操作实例详解【基于pymysql库】
2019/06/04 Python
pyqt实现.ui文件批量转换为对应.py文件脚本
2019/06/19 Python
Python类中方法getitem和getattr详解
2019/08/30 Python
使用CSS3的::selection改变选中文本颜色的方法
2015/09/29 HTML / CSS
CSS3 实现雷达扫描图的示例代码
2020/09/21 HTML / CSS
台湾专柜女包:KINAZ
2019/12/26 全球购物
Lookfantastic阿联酋官网:英国知名美妆护肤购物网站
2020/05/26 全球购物
雷蛇美国官网:Razer
2020/04/03 全球购物
党员公开承诺书范文
2014/03/25 职场文书
房屋买卖协议书
2014/04/10 职场文书
人力资源本科毕业生求职信
2014/06/04 职场文书
投标人法定代表人授权委托书格式
2014/09/28 职场文书
CSS中Single Div 绘图技巧的实现
2021/06/18 HTML / CSS
Selenium浏览器自动化如何上传文件
2022/04/06 Python
Go gRPC进阶教程gRPC转换HTTP
2022/06/16 Golang