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下几个常用的去空、分组、调试数组函数
Feb 22 PHP
php不用内置函数对数组排序的两个算法代码
Feb 08 PHP
实用PHP会员权限控制实现原理分析
May 29 PHP
解析关于wamp启动是80端口被占用的问题
Jun 21 PHP
微信公众号点击菜单即可打开并登录微站的实现方法
Nov 14 PHP
PHP排序算法类实例
Jun 17 PHP
PHP中读取文件的几个方法总结(推荐)
Jun 03 PHP
Yii2实现同时搜索多个字段的方法
Aug 10 PHP
php将文件夹打包成zip文件的简单实现方法
Oct 04 PHP
PHP微信H5支付开发实例
Jul 25 PHP
PHP等比例压缩图片的实例代码
Jul 26 PHP
PHP时间日期增减操作示例【date strtotime实现加一天、加一月等操作】
Dec 21 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
深入密码加salt原理的分析
2013/06/06 PHP
php 类自动载入的方法
2015/06/03 PHP
php 输入输出流详解及示例代码
2016/08/25 PHP
Yii框架分页技术实例分析
2019/08/30 PHP
PHP与SQL语句写一句话木马总结
2019/10/11 PHP
Prototype Template对象 学习
2009/07/19 Javascript
jquery利用event.which方法获取键盘输入值的代码
2011/10/09 Javascript
jquery 延迟执行实例介绍
2013/08/20 Javascript
Jquery实现的一种常用高亮效果示例代码
2014/01/28 Javascript
Javascript中replace()小结
2015/09/30 Javascript
JavaScript使ifram跨域相互访问及与PHP通信的实例
2016/03/03 Javascript
confirm确认对话框的实现方法总结
2016/06/17 Javascript
Javascript中常见的逻辑题和解决方法
2016/09/17 Javascript
js 动态生成json对象、时时更新json对象的方法
2016/12/02 Javascript
jQuery图片轮播实现并封装(一)
2016/12/03 Javascript
vue.js打包之后可能会遇到的坑!
2018/06/03 Javascript
uni-app之APP和小程序微信授权方法
2019/05/09 Javascript
Vue 自定义指令功能完整实例
2019/09/17 Javascript
javascript 设计模式之组合模式原理与应用详解
2020/04/08 Javascript
聊聊vue 中的v-on参数问题
2021/01/29 Vue.js
vue实现桌面向网页拖动文件的示例代码(可显示图片/音频/视频)
2021/03/01 Vue.js
在Django中输出matplotlib生成的图片方法
2018/05/24 Python
Scrapy框架使用的基本知识
2018/10/21 Python
Python基础学习之时间转换函数用法详解
2019/06/18 Python
python 一个figure上显示多个图像的实例
2019/07/08 Python
Python3实现打印任意宽度的菱形代码
2020/04/12 Python
HTML5 Canvas绘制文本及图片的基础教程
2016/03/14 HTML / CSS
amazeui模态框弹出后立马消失并刷新页面
2020/08/19 HTML / CSS
美国校园市场:OCM
2017/06/08 全球购物
friso美素佳儿官方海外旗舰店:荷兰原产原罐
2017/07/03 全球购物
Roxy荷兰官方网站:冲浪、滑雪板、服装和配件
2019/10/22 全球购物
试用期员工考核制度
2014/01/22 职场文书
工地宣传标语
2014/06/18 职场文书
python实现股票历史数据可视化分析案例
2021/06/10 Python
python 多态 协议 鸭子类型详解
2021/11/27 Python
SpringBoot全局异常处理方案分享
2022/05/25 Java/Android