php设计模式 Command(命令模式)


Posted in PHP onJune 26, 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();
PHP 相关文章推荐
PHP网站提速三大“软”招
Oct 09 PHP
php下使用curl模拟用户登陆的代码
Sep 10 PHP
Apache2中实现多网站域名绑定的实现方法
Jun 01 PHP
PHP连接SQLServer2005的实现方法(附ntwdblib.dll下载)
Jul 02 PHP
php中文乱码怎么办如何让浏览器自动识别utf-8
Jan 15 PHP
PHP的foreach中使用引用时需要注意的一个问题和解决方法
May 29 PHP
php+ajax 实现输入读取数据库显示匹配信息
Oct 08 PHP
thinkphp多层MVC用法分析
Dec 30 PHP
Adnroid 微信内置浏览器清除缓存
Jul 11 PHP
PHP实现页面静态化的超简单方法
Sep 06 PHP
php文件上传、下载和删除示例
Aug 28 PHP
PHP实现原生态图片上传封装类方法
Nov 08 PHP
php设计模式 Template (模板模式)
Jun 26 #PHP
php设计模式 Proxy (代理模式)
Jun 26 #PHP
php设计模式 Composite (组合模式)
Jun 26 #PHP
php设计模式 State (状态模式)
Jun 26 #PHP
php设计模式 Bridge (桥接模式)
Jun 26 #PHP
php设计模式 Chain Of Responsibility (职责链模式)
Jun 26 #PHP
php设计模式 FlyWeight (享元模式)
Jun 26 #PHP
You might like
function.inc.php超越php
2006/12/09 PHP
PHP开发的一些注意点总结
2010/10/12 PHP
一个php生成16位随机数的代码(两种方法)
2014/09/16 PHP
PHP实现HTML生成PDF文件的方法
2014/11/07 PHP
PHP通过内置函数memory_get_usage()获取内存使用情况
2014/11/20 PHP
浅析PHP类的反射来实现依赖注入过程
2018/02/06 PHP
PHP如何使用array_unshift()在数组开头插入元素
2020/09/01 PHP
常用的javascript function代码
2008/05/23 Javascript
JavaScript与Image加载事件(onload)、加载状态(complete)
2011/02/14 Javascript
IE8的JavaScript点击事件(onclick)不兼容的解决方法
2013/11/22 Javascript
$.each与$().each的区别示例介绍
2014/03/20 Javascript
通过XMLHttpRequest和jQuery实现ajax的几种方式
2015/08/28 Javascript
基于JavaScript实现 网页切出 网站title变化代码
2016/04/03 Javascript
jquery基本选择器匹配多个元素的实现方法
2016/09/05 Javascript
JS之if语句对接事件动作逻辑(详解)
2017/06/28 Javascript
jQuery 实时保存页面动态添加的数据的示例
2017/08/14 jQuery
Vue.js如何实现路由懒加载浅析
2017/08/14 Javascript
jQuery模拟爆炸倒计时功能实例代码
2017/08/21 jQuery
js 取消页面可以选中文字的功能方法
2018/01/02 Javascript
Makefile/cmake/node-gyp中区分判断不同平台的方法
2018/12/18 Javascript
基于jQuery的时间戳与日期间的转化
2019/06/21 jQuery
浅探express路由和中间件的实现
2019/09/30 Javascript
在Python中使用PIL模块处理图像的教程
2015/04/29 Python
python过滤字符串中不属于指定集合中字符的类实例
2015/06/30 Python
Django中处理出错页面的方法
2015/07/15 Python
Python的Django框架中URLconf相关的一些技巧整理
2015/07/18 Python
python中星号变量的几种特殊用法
2016/09/07 Python
python使用response.read()接收json数据的实例
2018/12/19 Python
Form表单及django的form表单的补充
2019/07/25 Python
OpenCV python sklearn随机超参数搜索的实现
2020/01/17 Python
巴西最大的在线约会网站:ParPerfeito
2018/07/11 全球购物
彩色的非洲教学反思
2014/02/18 职场文书
会员卡清退活动总结
2014/08/27 职场文书
硕士毕业论文导师评语
2014/12/31 职场文书
导游词之山海关
2019/12/10 职场文书
Python Flask搭建yolov3目标检测系统详解流程
2021/11/07 Python