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动态生成虚拟现实VRML网页
Oct 09 PHP
session在PHP大型web应用中的使用
Jun 25 PHP
phpmyadmin3 安装配置图解教程
Mar 29 PHP
PHP 使用pcntl和libevent 实现Timer功能
Oct 27 PHP
php常用数学函数汇总
Nov 21 PHP
php通过前序遍历树实现无需递归的无限极分类
Jul 10 PHP
PHP读取配置文件类实例(可读取ini,yaml,xml等)
Jul 28 PHP
Laravel实现构造函数自动依赖注入的方法
Mar 16 PHP
Laravel与CI框架中截取字符串函数
May 08 PHP
PHP实现根据数组的值进行分组的方法
Apr 20 PHP
Laravel框架路由和控制器的绑定操作方法
Jun 12 PHP
详解php伪造Referer请求反盗链资源
Jan 24 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判断变量的函数
2012/04/24 PHP
Symfony2函数用法实例分析
2016/03/18 PHP
php查询操作实现投票功能
2016/05/09 PHP
PHP  实现等比压缩图片尺寸和大小实例代码
2016/10/08 PHP
PHP 多任务秒级定时器的实现方法
2018/05/13 PHP
laravel-admin 在列表页添加自定义按钮的例子
2019/09/30 PHP
解决laravel 表单提交-POST 异常的问题
2019/10/15 PHP
使用JS画图之点、线、面
2015/01/12 Javascript
基于JS+Canves实现点击按钮水波纹效果
2016/09/15 Javascript
浅谈jQuery效果函数
2016/09/16 Javascript
用jQuery实现可输入多选下拉组合框实例代码
2017/01/18 Javascript
JavaScript多线程运行库Nexus.js详解
2017/12/22 Javascript
使用vue-cli3新建一个项目并写好基本配置(推荐)
2019/04/24 Javascript
json_decode 索引为数字时自动排序问题解决方法
2020/03/28 Javascript
[55:42]VG vs VGJ.T 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
Python实现把数字转换成中文
2015/06/29 Python
pycharm远程调试openstack代码
2017/11/21 Python
VTK与Python实现机械臂三维模型可视化详解
2017/12/13 Python
python写入已存在的excel数据实例
2018/05/03 Python
Django实现全文检索的方法(支持中文)
2018/05/14 Python
10款最好的Python开发编辑器
2019/07/03 Python
python爬虫开发之使用python爬虫库requests,urllib与今日头条搜索功能爬取搜索内容实例
2020/03/10 Python
Python列表去重复项的N种方法(实例代码)
2020/05/12 Python
Python DES加密实现原理及实例解析
2020/07/17 Python
css3media响应式布局实例
2016/07/08 HTML / CSS
HashMap和Hashtable的区别
2013/05/18 面试题
工作的心得体会
2013/12/31 职场文书
小学生检讨书大全
2014/02/06 职场文书
抗洪抢险事迹材料
2014/05/06 职场文书
2014党员四风对照检查材料思想汇报
2014/09/17 职场文书
企业法人代表证明书
2014/09/27 职场文书
教师党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
Mysql Online DDL的使用详解
2021/05/20 MySQL
试用1103暨1103、1101同门大比武 [ DAIWEI ]
2022/04/05 无线电
德劲DE1107指针试高灵敏度全波段收音机机评
2022/04/05 无线电
Win Server2016远程桌面如何允许多用户同时登录
2022/06/10 Servers