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 相关文章推荐
一个ORACLE分页程序,挺实用的.
Oct 09 PHP
PHP产生随机字符串函数
Dec 06 PHP
PHP下使用CURL方式POST数据至API接口的代码
Feb 14 PHP
ThinkPHP中I(),U(),$this-&gt;post()等函数用法
Nov 22 PHP
在html文件中也可以执行php语句的方法
Apr 09 PHP
提高php编程效率技巧
Aug 13 PHP
删除PHP数组中头部、尾部、任意元素的实现代码
Apr 10 PHP
Laravel框架实现多个视图共享相同数据的方法详解
Jul 09 PHP
php中关于换行的实例写法
Sep 26 PHP
Thinkphp5.0框架视图view的模板布局用法分析
Oct 12 PHP
laravel 错误处理,接口错误返回json代码
Oct 25 PHP
Laravel5.1 框架数据库操作DB运行原生SQL的方法分析
Jan 07 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
解析PHP无限级分类方法及代码
2013/06/21 PHP
采用ThinkPHP中F方法实现快速缓存实例
2014/06/13 PHP
phpmailer在服务器上不能正常发送邮件的解决办法
2014/07/08 PHP
php实现utf-8转unicode函数分享
2015/01/06 PHP
PHP中preg_match函数正则匹配的字符串长度问题
2015/05/27 PHP
golang与PHP输出excel示例
2016/07/22 PHP
PHP 实现字符串翻转(包含中文汉字)的实现代码
2017/04/01 PHP
PHP添加文字水印或图片水印的水印类完整源代码与使用示例
2019/03/18 PHP
extjs render 用法介绍
2013/09/11 Javascript
javascript原型链继承用法实例分析
2015/01/28 Javascript
jQuery构造函数init参数分析
2015/05/13 Javascript
微信js-sdk地理位置接口用法示例
2016/10/12 Javascript
BootStrap daterangepicker 双日历控件
2017/06/02 Javascript
Node.js中的cluster模块深入解读
2018/06/11 Javascript
Bootstrap 模态框自定义点击和关闭事件详解
2018/08/10 Javascript
vue组件通信传值操作示例
2019/01/08 Javascript
微信小程序中的上拉、下拉菜单功能
2020/03/13 Javascript
python中matplotlib的颜色及线条控制的示例
2018/03/16 Python
Python iter()函数用法实例分析
2018/03/17 Python
对Python中实现两个数的值交换的集中方法详解
2019/01/11 Python
简单了解python中的与或非运算
2019/09/18 Python
pytorch程序异常后删除占用的显存操作
2020/01/13 Python
pytorch masked_fill报错的解决
2020/02/18 Python
Python3内置函数chr和ord实现进制转换
2020/06/05 Python
pytorch简介
2020/11/11 Python
HTML5之HTML元素扩展(下)—增强的Form表单元素值得关注
2013/01/31 HTML / CSS
上海奥佳笔试题面试题
2016/11/16 面试题
语文教育专业应届生求职信
2013/11/23 职场文书
公司中秋节活动方案
2014/02/12 职场文书
老公给老婆的保证书
2014/04/28 职场文书
被告代理词范文
2015/05/25 职场文书
反腐倡廉观后感
2015/06/08 职场文书
企业内部管理控制:银行存款控制制度范本
2020/01/10 职场文书
Python爬虫框架之Scrapy中Spider的用法
2021/06/28 Python
Nginx防盗链与服务优化配置的全过程
2022/01/18 Servers