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&amp;MYSQL服务器配置说明
Oct 09 PHP
杏林同学录(八)
Oct 09 PHP
snoopy 强大的PHP采集类使用实例代码
Dec 09 PHP
解析php5配置使用pdo
Jul 03 PHP
php过滤html标记属性类用法实例
Sep 23 PHP
php模拟用户自动在qq空间发表文章的方法
Jan 07 PHP
PHP学习笔记(一):基本语法之标记、空白、和注释
Apr 17 PHP
php冒泡排序与快速排序实例详解
Dec 07 PHP
php获得客户端浏览器名称及版本的方法(基于ECShop函数)
Dec 23 PHP
PHP模板引擎Smarty内建函数foreach,foreachelse用法分析
Apr 11 PHP
php构造函数与析构函数
Apr 23 PHP
Zend Framework路由器用法实例详解
Dec 11 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
PHP5 操作MySQL数据库基础代码
2009/09/29 PHP
php+ajax实现仿百度查询下拉内容功能示例
2017/10/20 PHP
基于PHP+Mysql简单实现了图书购物车系统的实例详解
2020/08/06 PHP
网页开发中的容易忽略的问题 javascript HTML中的table
2009/04/15 Javascript
jQuery的each终止或跳过示例代码
2013/12/12 Javascript
jQuery获取选中内容及设置元素属性的方法
2014/07/09 Javascript
jquery 插件实现瀑布流图片展示实例
2015/04/03 Javascript
在AngularJS中如何使用谷歌地图把当前位置显示出来
2016/01/25 Javascript
总结JavaScript的正则与其他语言的不同之处
2016/08/25 Javascript
分享19个JavaScript 有用的简写写法
2017/07/07 Javascript
node.js支持多用户web终端实现及安全方案
2017/11/29 Javascript
总结4个方面优化Vue项目
2019/02/11 Javascript
vue项目中运用webpack动态配置打包多种环境域名的方法
2019/06/24 Javascript
Vue使用JSEncrypt实现rsa加密及挂载方法
2020/02/07 Javascript
原生js实现点击轮播切换图片
2020/02/11 Javascript
python写入中英文字符串到文件的方法
2015/05/06 Python
简介二分查找算法与相关的Python实现示例
2015/08/26 Python
selenium+python实现自动化登录的方法
2018/09/04 Python
Django中使用Json返回数据的实现方法
2020/06/03 Python
基于python实现可视化生成二维码工具
2020/07/08 Python
英国电视和家用电器购物网站:rlrdistribution.co.uk
2018/11/20 全球购物
eVitamins日本:在线购买折扣维生素、补品和草药
2019/04/04 全球购物
英语专业推荐信
2013/11/16 职场文书
社团招新策划书
2014/02/04 职场文书
大学三年计划书范文
2014/04/30 职场文书
团队激励口号
2014/06/06 职场文书
奥巴马当选演讲稿
2014/09/10 职场文书
教师党员学习十八届四中全会思想汇报
2014/11/03 职场文书
2015年销售人员工作总结
2015/04/07 职场文书
离职信范本
2015/06/23 职场文书
2016年重阳节慰问信
2015/12/01 职场文书
《女娲补天》教学反思
2016/02/20 职场文书
个人工作总结怎么写?
2019/04/09 职场文书
如何用JS实现网页瀑布流布局
2021/04/24 Javascript
python脚本框架webpy的url映射详解
2021/11/20 Python
Python获取字典中某个key的value
2022/04/13 Python