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 各种排序算法实现代码
Aug 20 PHP
PHP的substr_replace将指定两位置之间的字符替换为*号
May 04 PHP
php whois查询API制作方法
Jun 23 PHP
phpmyadmin安装时提示:Warning: require_once(./libraries/common.inc.php)错误解决办法
Aug 18 PHP
php json_encode值中大括号与花括号区别
Sep 30 PHP
适用于初学者的简易PHP文件上传类
Oct 29 PHP
thinkPHP引入类的方法详解
Dec 08 PHP
php json_encode与json_decode详解及实例
Dec 13 PHP
PHP如何读取由JavaScript设置的Cookie
Mar 22 PHP
PHP实现的随机红包算法示例
Aug 14 PHP
PHP基于curl模拟post提交json数据示例
Jun 22 PHP
PhpStorm连接服务器并实现自动上传功能
Dec 09 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
SONY SRF-22W(33W)的电路分析和维修案例
2021/03/02 无线电
PHP实现模仿socket请求返回页面的方法
2014/11/04 PHP
YII2框架中日志的配置与使用方法实例分析
2020/03/18 PHP
通过Jquery遍历Json的两种数据结构的实现代码
2011/01/19 Javascript
JS获取键盘上任意按键的值(实例代码)
2013/11/12 Javascript
原生JavaScript+LESS实现瀑布流
2014/12/12 Javascript
jQuery中hide()方法用法实例
2014/12/24 Javascript
JavaScript结合AJAX_stream实现流式显示
2015/01/08 Javascript
Javascript实现多彩雪花从天降散落效果的方法
2015/02/02 Javascript
四种参数传递的形式——URL,超链接,js,form表单
2015/07/24 Javascript
浅谈Angular.js中使用$watch监听模型变化
2017/01/10 Javascript
vue2.0实战之使用vue-cli搭建项目(2)
2017/03/27 Javascript
jquery插件开发之选项卡制作详解
2017/08/30 jQuery
js实现图片粘贴上传到服务器并展示的实例
2017/11/08 Javascript
在ES5与ES6环境下处理函数默认参数的实现方法
2018/05/13 Javascript
jQuery时间戳和日期相互转换操作示例
2018/12/07 jQuery
通过JS运行机制的角度说说作用域
2019/03/12 Javascript
JavaScript前端页面搜索功能案例【基于jQuery】
2019/07/10 jQuery
[46:20]CHAOS vs Alliacne 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python getopt 参数处理小示例
2009/06/09 Python
python私有属性和方法实例分析
2015/01/15 Python
Python3.6简单操作Mysql数据库
2017/09/12 Python
把csv文件转化为数组及数组的切片方法
2018/07/04 Python
基于python代码实现简易滤除数字的方法
2018/07/17 Python
解读python如何实现决策树算法
2018/10/11 Python
Python中的heapq模块源码详析
2019/01/08 Python
Ranorex通过Python将报告发送到邮箱的方法
2020/01/12 Python
戴森西班牙官网:Dyson西班牙
2020/02/04 全球购物
Python的两道面试题
2013/06/29 面试题
应届生幼儿园求职信
2013/11/12 职场文书
2014年大学生就业规划书
2014/04/04 职场文书
平凡的世界读书笔记
2015/06/25 职场文书
八年级物理教学反思
2016/02/19 职场文书
python基于OpenCV模板匹配识别图片中的数字
2021/03/31 Python
Python面向对象编程之类的概念
2021/11/01 Python
MySQL远程无法连接的一些常见原因总结
2022/09/23 MySQL