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 相关文章推荐
Optimizer与Debugger兼容性问题的解决方法
Dec 01 PHP
PHP实现把数字ID转字母ID
Aug 12 PHP
PHP return语句另类用法不止是在函数中
Sep 17 PHP
PDO防注入原理分析以及注意事项
Feb 25 PHP
php中file_exists函数使用详解
May 08 PHP
PHP实现的迷你漂流瓶
Jul 29 PHP
PHP+iframe图片上传实现即时刷新效果
Nov 18 PHP
简单谈谈 php 文件锁
Feb 19 PHP
PHP使用HTML5 FileApi实现Ajax上传文件功能示例
Jul 01 PHP
php swoole多进程/多线程用法示例【基于php7nts版】
Aug 12 PHP
基于PHP实现短信验证码发送次数限制
Jul 11 PHP
php中数组最简单的使用方法
Dec 27 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
第二节--PHP5 的对象模型
2006/11/16 PHP
PHP文件缓存类示例分享
2015/01/30 PHP
PHP实现支持SSL连接的SMTP邮件发送类
2015/03/05 PHP
PHP浮点比较大小的方法
2016/02/14 PHP
PHP创建文件,并向文件中写入数据,覆盖,追加的实现代码
2016/03/25 PHP
php实现当前页面点击下载文件的实例代码
2016/11/16 PHP
JavaScript实现网页上的浮动广告的简单方法
2013/06/14 Javascript
jQuery处理json数据返回数组和输出的方法
2015/03/11 Javascript
JavaScript实现的圆形浮动标签云效果实例
2015/08/06 Javascript
JavaScript生成二维码图片小结
2015/12/27 Javascript
基于JavaScript的操作系统你听说过吗?
2016/01/28 Javascript
检查表单元素的值是否为空的实例代码
2016/06/16 Javascript
AngularJS深入探讨scope,继承结构,事件系统和生命周期
2016/11/02 Javascript
纯JS实现弹性导航条效果
2017/03/06 Javascript
使用OPENLAYERS3实现点选的方法
2020/09/24 Javascript
jQuery获取复选框选中的当前行的某个字段的值
2017/09/15 jQuery
vue项目中使用AES实现密码加密解密(ECB和CBC两种模式)
2019/08/12 Javascript
VUE兄弟组件传值操作实例分析
2019/10/26 Javascript
聊聊Vue中provide/inject的应用详解
2019/11/10 Javascript
vue使用微信扫一扫功能的实现代码
2020/04/11 Javascript
[20:57]Ti4主赛事第三天开幕式
2014/07/21 DOTA
使用优化器来提升Python程序的执行效率的教程
2015/04/02 Python
python制作简单五子棋游戏
2019/06/18 Python
python实现在函数中修改变量值的方法
2019/07/16 Python
PyQt5实现暗黑风格的计时器
2019/07/29 Python
matplotlib绘制多个子图(subplot)的方法
2019/12/03 Python
python列表删除和多重循环退出原理详解
2020/03/26 Python
英国品牌男装折扣网站:Brown Bag
2018/03/08 全球购物
恶意软件的定义
2014/11/12 面试题
如何做好总经理助理
2013/11/12 职场文书
2014年党员干部四风问题自我剖析材料
2014/09/29 职场文书
副乡长民主生活会个人对照检查材料思想汇报
2014/10/01 职场文书
2014年班干部工作总结
2014/11/25 职场文书
居住证明范文
2015/06/17 职场文书
领导新年致辞2016
2015/07/29 职场文书
你需要掌握的20个Python常用技巧
2022/02/28 Python