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将数据导入到Foxmail
Oct 09 PHP
php str_pad 函数用法简介
Jul 11 PHP
php 正则匹配函数体
Aug 25 PHP
php后台程序与Javascript的两种交互方式
Oct 25 PHP
如何使用PHP计算上一个月的今天
May 23 PHP
CodeIgniter采用config控制的多语言实现根据浏览器语言自动转换功能
Jul 18 PHP
php实现把url转换迅雷thunder资源下载地址的方法
Nov 07 PHP
PHP判断FORM表单或URL参数来的数据是否为整数的方法
Mar 25 PHP
php使用正则验证中文
Apr 06 PHP
Laravel中使用FormRequest进行表单验证方法及问题汇总
Jun 19 PHP
PHP构造二叉树算法示例
Jun 21 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
Mar 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中实现进程锁与多进程的方法
2016/09/18 PHP
FireFox与IE 下js兼容触发click事件的代码
2008/11/20 Javascript
jqPlot 图表中文API使用文档及源码和在线示例
2012/02/07 Javascript
基于jquery &amp; json的省市区联动代码
2012/06/26 Javascript
js中switch case循环实例代码
2013/12/30 Javascript
jquery实现的一个文章自定义分段显示功能
2014/05/23 Javascript
JavaScript中九种常用排序算法
2014/09/02 Javascript
ztree获取当前选中节点子节点id集合的方法
2015/02/12 Javascript
js实现类似菜单风格的TAB选项卡效果代码
2015/08/28 Javascript
非常实用的12个jquery代码片段
2015/11/02 Javascript
JavaScript模版引擎的基本实现方法浅析
2016/02/15 Javascript
详解js的事件处理函数和动态创建html标记方法
2016/12/16 Javascript
js实现简单的获取验证码按钮效果
2017/03/03 Javascript
Django1.7+JQuery+Ajax验证用户注册集成小例子
2017/04/08 jQuery
Angualrjs 表单验证的两种方式(失去焦点验证和点击提交验证)
2017/05/09 Javascript
element-ui表格合并span-method的实现方法
2019/05/21 Javascript
webpack4 从零学习常用配置(小结)
2019/05/28 Javascript
[05:46]DOTA2英雄梦之声_第18期_陈
2014/06/20 DOTA
Python中对元组和列表按条件进行排序的方法示例
2015/11/10 Python
Python字符串的全排列算法实例详解
2019/01/07 Python
简单了解Python matplotlib线的属性
2019/06/29 Python
将tensorflow模型打包成PB文件及PB文件读取方式
2020/01/23 Python
Pycharm插件(Grep Console)自定义规则输出颜色日志的方法
2020/05/27 Python
HTML5触摸事件演化tap事件介绍
2016/03/25 HTML / CSS
Eagle Eyes Optics鹰眼光学:高性能太阳镜
2018/12/07 全球购物
Charles & Colvard官网:美国莫桑石品牌
2019/06/05 全球购物
动态密码技术
2012/10/18 面试题
好的自荐信的要求
2013/10/30 职场文书
中学生获奖感言
2014/02/04 职场文书
护理人员的自我评价分享
2014/03/15 职场文书
大学生党员个人对照检查材料范文
2014/09/25 职场文书
运动会广播稿200字
2014/10/18 职场文书
2016同学毕业寄语大全
2015/12/04 职场文书
事业单位工作人员岗前培训心得体会
2016/01/08 职场文书
护理工作心得体会
2016/01/22 职场文书
2016年庆“七一”主题党日活动总结
2016/04/05 职场文书