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水印
Mar 16 PHP
PHP学习笔记之二
Jan 17 PHP
php 判断数组是几维数组
Mar 20 PHP
探讨:使用XMLSerialize 序列化与反序列化
Jun 08 PHP
yii操作cookie实例简介
Jul 09 PHP
PHP学习笔记(一) 简单了解PHP
Aug 04 PHP
PHP 正则表达式小结
Feb 12 PHP
PHP实现对png图像进行缩放的方法(支持透明背景)
Jul 15 PHP
php实现多城市切换特效
Aug 09 PHP
CodeIgniter读写分离实现方法详解
Jan 20 PHP
基于swoole实现多人聊天室
Jun 14 PHP
Yii框架使用PHPExcel导出Excel文件的方法分析【改进版】
Jul 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新手谈谈我的学习心得
2007/02/25 PHP
PHP+javascript制作带提示的验证码源码分享
2014/05/28 PHP
PDO的安全处理与事物处理方法
2016/10/31 PHP
微信公众号模板消息群发php代码示例
2016/12/29 PHP
在修改准备发的批量美化select+可修改select时,在非IE下发现了几个问题
2007/01/09 Javascript
javascript 面向对象,实现namespace,class,继承,重载
2009/10/29 Javascript
jquery ajax提交表单数据的两种方式
2009/11/24 Javascript
Javascript 二维数组
2009/11/26 Javascript
用jquery与css打造个性化的单选框和复选框
2010/10/20 Javascript
jquery给图片添加鼠标经过时的边框效果
2013/11/12 Javascript
jQuery实现的鼠标滑过弹出放大图片特效
2016/01/08 Javascript
Javascript打印局部页面实例
2016/06/21 Javascript
vue-cli+webpack记事本项目创建
2017/04/01 Javascript
Angular17之Angular自定义指令详解
2018/01/21 Javascript
Angular 实现输入框中显示文章标签的实例代码
2018/11/07 Javascript
详解在不使用ssr的情况下解决Vue单页面SEO问题
2018/11/08 Javascript
浅谈Angular7 项目开发总结
2018/12/19 Javascript
10个最受欢迎的 JavaScript框架(推荐)
2019/04/24 Javascript
vue实现倒计时获取验证码效果
2020/04/17 Javascript
Vue中使用Lodop插件实现打印功能的简单方法
2019/12/19 Javascript
Python字符和字符值(ASCII或Unicode码值)转换方法
2015/05/21 Python
Python+matplotlib绘制不同大小和颜色散点图实例
2018/01/19 Python
解决Mac安装scrapy失败的问题
2018/06/13 Python
python K近邻算法的kd树实现
2018/09/06 Python
python3射线法判断点是否在多边形内
2019/06/28 Python
nginx+uwsgi+django环境搭建的方法步骤
2019/11/25 Python
pytorch标签转onehot形式实例
2020/01/02 Python
详解canvas绘图时遇到的跨域问题
2018/03/22 HTML / CSS
化石印度尼西亚在线商店:Fossil Indonesia
2019/03/11 全球购物
如何通过 CSS 写出火焰效果
2021/03/24 HTML / CSS
自我鉴定范文
2013/11/10 职场文书
对外汉语专业大学生职业生涯规划范文
2014/09/13 职场文书
群众路线教育实践活动批评与自我批评
2014/09/15 职场文书
人事聘任通知
2015/04/21 职场文书
导游词之江西赣州
2019/10/15 职场文书
nginx实现发布静态资源的方法
2021/03/31 Servers