php设计模式  Command(命令模式)


Posted in PHP onJune 17, 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();
[/code]

PHP 相关文章推荐
计算2000年01月01日起到指定日的天数
Oct 09 PHP
在PHP3中实现SESSION的功能(二)
Oct 09 PHP
Mysql的GROUP_CONCAT()函数使用方法
Mar 28 PHP
五个PHP程序员工具
May 26 PHP
php empty() 检查一个变量是否为空
Nov 10 PHP
PHP下使用CURL方式POST数据至API接口的代码
Feb 14 PHP
php生成N个不重复的随机数实例
Nov 12 PHP
php编写批量生成不重复的卡号密码代码
May 14 PHP
PHP代码判断设备是手机还是平板电脑(两种方法)
Oct 19 PHP
Linux环境下php实现给网站截图的方法
May 03 PHP
PHP生成(支持多模板)二维码海报代码
Apr 30 PHP
PHP基于curl模拟post提交json数据示例
Jun 22 PHP
php学习笔记 面向对象中[接口]与[多态性]的应用
Jun 16 #PHP
php smarty 二级分类代码和模版循环例子
Jun 16 #PHP
Warning: session_destroy() : Trying to destroy uninitialized sessionq错误
Jun 16 #PHP
php中session_unset与session_destroy的区别分析
Jun 16 #PHP
不重新编译PHP为php增加openssl模块的方法
Jun 14 #PHP
php的memcached客户端memcached
Jun 14 #PHP
PHP模块 Memcached功能多于Memcache
Jun 14 #PHP
You might like
用Socket发送电子邮件(利用需要验证的SMTP服务器)
2006/10/09 PHP
php学习笔记 面向对象中[接口]与[多态性]的应用
2011/06/16 PHP
解决FastCGI 进程超过了配置的活动超时时限的问题
2013/07/03 PHP
检测codeigniter脚本消耗内存情况的方法
2015/03/21 PHP
PHP7新功能总结
2019/04/14 PHP
将CKfinder整合进CKEditor3.0的新方法
2010/01/10 Javascript
javascript中的float运算精度实例分析
2010/08/21 Javascript
ExtJS4中使用mixins实现多继承示例
2013/12/03 Javascript
采用call方式实现js继承
2014/05/20 Javascript
node.js中的url.resolve方法使用说明
2014/12/10 Javascript
windows8.1+iis8.5下安装node.js开发环境
2014/12/12 Javascript
node.js中的fs.fchown方法使用说明
2014/12/16 Javascript
微信小程序 wx.uploadFile在安卓手机上面the same task is working问题解决
2016/12/14 Javascript
BootStrap整体框架之基础布局组件
2016/12/15 Javascript
vue axios 简单封装以及思考
2018/10/09 Javascript
通过JavaScript下载文件到本地的方法(单文件)
2019/03/17 Javascript
[59:08]Ti4 冒泡赛第二天 NEWBEE vs Titan 2
2014/07/15 DOTA
Python连接SQLServer2000的方法详解
2017/04/19 Python
python pandas 组内排序、单组排序、标号的实例
2018/04/12 Python
python 基本数据类型占用内存空间大小的实例
2018/06/12 Python
pandas通过索引进行排序的示例
2018/11/16 Python
python操作日志的封装方法(两种方法)
2019/05/23 Python
查看端口并杀进程python脚本代码
2019/12/17 Python
python 对任意数据和曲线进行拟合并求出函数表达式的三种解决方案
2020/02/18 Python
Python基于内置库pytesseract实现图片验证码识别功能
2020/02/24 Python
Python创建临时文件和文件夹
2020/08/05 Python
大学本科毕业生的自我鉴定范文
2013/11/19 职场文书
年度考核评语
2014/01/19 职场文书
本科生自荐信
2014/06/18 职场文书
大学竞选班干部演讲稿
2014/08/21 职场文书
2014年医院党建工作总结
2014/12/20 职场文书
劳模先进事迹材料
2014/12/24 职场文书
黄河绝恋观后感
2015/06/08 职场文书
MySQL 逻辑备份与恢复测试的相关总结
2021/05/14 MySQL
2021好看的国漫排行榜前十名 《完美世界》上榜,《元龙》排名第一
2022/03/18 国漫
python实现会员管理系统
2022/03/18 Python