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 相关文章推荐
支持oicq头像的留言簿(一)
Oct 09 PHP
PHP脚本数据库功能详解(下)
Oct 09 PHP
php imagecreatetruecolor 创建高清和透明图片代码小结
May 15 PHP
使用PHP实现Mysql读写分离
Jun 28 PHP
CodeIgniter输出中文乱码的两种解决办法
Jun 12 PHP
PHP内存缓存Memcached类实例
Dec 08 PHP
PHP连接MySQL数据的操作要点
Mar 20 PHP
Smarty使用自定义资源的方法
Aug 08 PHP
PHP实现获取并生成数据库字典的方法
May 04 PHP
php结合redis高并发下发帖、发微博的实现方法
Dec 15 PHP
PHP检查端口是否可以被绑定的方法示例
Aug 09 PHP
php pdo连接数据库操作示例
Nov 18 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
php中字符查找函数strpos、strrchr与strpbrk用法
2014/11/18 PHP
thinkphp数据查询和遍历数组实例
2014/11/28 PHP
PHP基于递归算法解决兔子生兔子问题
2018/05/11 PHP
laravel框架中视图的基本使用方法分析
2019/11/23 PHP
不懂JavaScript应该怎样学
2008/04/16 Javascript
JavaScript高级程序设计 阅读笔记(二十) js错误处理
2012/08/14 Javascript
JS过滤url参数特殊字符的实现方法
2013/12/24 Javascript
jQuery自定义事件的简单实现代码
2014/01/27 Javascript
JavaScript中的数学运算介绍
2014/12/29 Javascript
js简单实现竖向tab选项卡的方法
2015/05/04 Javascript
jQuery实现复选框批量选择与反选的方法
2015/06/17 Javascript
十大 Node.js 的 Web 框架(快速提升工作效率)
2017/06/30 Javascript
基于require.js的使用(实例讲解)
2017/09/07 Javascript
vue项目中实现图片预览的公用组件功能
2018/10/26 Javascript
vue-better-scroll 的使用实例代码详解
2018/12/03 Javascript
详解vue挂载到dom上会发生什么
2019/01/20 Javascript
深入解析vue 源码目录及构建过程分析
2019/04/24 Javascript
JS造成内存泄漏的几种情况实例分析
2020/03/02 Javascript
微信小程序绘制半圆(弧形)进度条
2020/11/18 Javascript
[38:21]2018DOTA2亚洲邀请赛3月30日 小组赛A组 LGD VS Newbee
2018/03/31 DOTA
Python实现的二维码生成小软件
2014/07/11 Python
在Python中使用swapCase()方法转换大小写的教程
2015/05/20 Python
python中kmeans聚类实现代码
2018/02/23 Python
Python线程同步的实现代码
2018/10/03 Python
使用python实现unix2dos和dos2unix命令的例子
2019/08/13 Python
git查看、创建、删除、本地、远程分支方法详解
2020/02/18 Python
html5菜单折纸效果
2014/04/22 HTML / CSS
HTML5+lufylegend实现游戏中的卷轴
2016/02/29 HTML / CSS
英国家居装饰品、户外家具和玻璃器皿购物网站:Rinkit.com
2019/11/04 全球购物
Groupon西班牙官方网站:在线优惠券和交易,节省高达70%
2021/03/13 全球购物
美德少年事迹材料
2014/01/23 职场文书
销售员岗位职责
2014/06/09 职场文书
普通党员整改措施
2014/10/24 职场文书
幼儿园奖惩制度范本
2015/08/05 职场文书
Pytorch 统计模型参数量的操作 param.numel()
2021/05/13 Python
Python语言规范之Pylint的详细用法
2021/06/24 Python