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 相关文章推荐
用PHP和MySQL保存和输出图片
Oct 09 PHP
汉字转化为拼音(php版)
Oct 09 PHP
php5中date()得出的时间为什么不是当前时间的解决方法
Jun 30 PHP
PHP 替换模板变量实现步骤
Aug 24 PHP
php使用array_rand()函数从数组中随机选择一个或多个元素
Apr 28 PHP
php中explode函数用法分析
Nov 15 PHP
PHP 数据结构队列(SplQueue)和优先队列(SplPriorityQueue)简单使用实例
May 12 PHP
使用XHGui来测试PHP性能的教程
Jul 03 PHP
使用php实现网站验证码功能【推荐】
Feb 09 PHP
PHP实现的注册,登录及查询用户资料功能API接口示例
Jun 06 PHP
Django中的cookie与session操作实例代码
Aug 17 PHP
PHP实现求连续子数组最大和问题2种解决方法
Dec 26 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
十天学会php之第一天
2006/10/09 PHP
BBS(php &amp; mysql)完整版(一)
2006/10/09 PHP
php 表单验证实现代码
2009/03/10 PHP
解决CodeIgniter伪静态失效
2014/06/09 PHP
Windows2003下php5.4安装配置教程(IIS)
2016/06/30 PHP
PHP命名空间namespace用法实例分析
2016/09/27 PHP
Codeigniter里的无刷新上传的实现代码
2019/04/14 PHP
图片上传即时显示缩略图的js代码
2009/05/27 Javascript
div移动 输入框不能输入的问题
2009/11/19 Javascript
Javascript 实用小技巧
2010/04/07 Javascript
Javascript中的isNaN函数使用说明
2011/11/10 Javascript
JavaScript在XHTML中的用法详解
2013/04/11 Javascript
用客户端js实现带省略号的分页
2013/04/27 Javascript
使用jQuery监听扫码枪输入并禁止手动输入的实现方法(推荐)
2017/03/21 jQuery
js实现鼠标拖拽多选功能示例
2017/08/01 Javascript
webpack dll打包重复问题优化的解决
2018/10/10 Javascript
用python写asp详细讲解
2013/12/16 Python
python爬虫框架scrapy实战之爬取京东商城进阶篇
2017/04/24 Python
详解 Python 读写XML文件的实例
2017/08/02 Python
python Django中models进行模糊查询的示例
2019/07/18 Python
Python爬虫之Selenium实现窗口截图
2020/12/04 Python
俄罗斯眼镜网: optikaworld
2016/07/31 全球购物
Zadig&Voltaire官网:法国时装品牌
2018/01/05 全球购物
印度尼西亚值得信赖的第一家网店:Bhinneka
2018/07/16 全球购物
nohup的用法
2012/11/26 面试题
外贸英语专业求职信范文
2013/12/25 职场文书
女娲补天教学反思
2014/02/05 职场文书
初三学习决心书
2014/03/11 职场文书
医院护士见习期自我鉴定
2014/04/10 职场文书
社区爱国卫生月活动总结
2014/06/30 职场文书
2014年银行年终工作总结
2014/12/19 职场文书
英文慰问信范文
2015/03/24 职场文书
离开雷锋的日子观后感
2015/06/09 职场文书
公司开业致辞
2015/07/29 职场文书
同乡会致辞
2015/07/30 职场文书
MySQL数据库查询之多表查询总结
2022/08/05 MySQL