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 Document 代码注释规范
Apr 13 PHP
php下将多个数组合并成一个数组的方法与实例代码
Feb 03 PHP
使用ThinkPHP+Uploadify实现图片上传功能
Jun 26 PHP
php防止sql注入之过滤分页参数实例
Nov 03 PHP
Yii2 RESTful中api的使用及开发实例详解
Jul 06 PHP
ThinkPHP和UCenter接口冲突的解决方法
Jul 25 PHP
PHP入门教程之上传文件实例详解
Sep 11 PHP
php 人员权限管理(RBAC)实例(推荐)
May 24 PHP
浅谈Laravel中的一个后期静态绑定
Aug 11 PHP
php更新cookie内容的详细方法
Sep 30 PHP
Laravel配合jwt使用的方法实例
Oct 25 PHP
如何用PHP实现多线程编程
May 26 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对象类型判断
2008/08/27 PHP
PHP和C#可共用的可逆加密算法详解
2015/10/26 PHP
PHP面向对象编程之深入理解方法重载与方法覆盖(多态)
2015/12/24 PHP
javascript读取RSS数据
2007/01/20 Javascript
JS+JSP checkBox 全选具体实现
2014/01/02 Javascript
JQuery中使用Ajax赋值给全局变量异常的解决方法
2014/01/10 Javascript
js验证IP及子网掩码的合法性有效性示例
2014/04/30 Javascript
jQuery循环滚动新闻列表示例代码
2014/06/17 Javascript
jQuery解析XML与传统JavaScript方法的差别实例分析
2015/03/05 Javascript
使用javascript实现判断当前浏览器
2015/04/14 Javascript
Bootstrap网格系统详解
2016/04/26 Javascript
实现点击下箭头变上箭头来回切换的两种方法【推荐】
2016/12/14 Javascript
JQuery实现动态操作表格
2017/01/11 Javascript
nodejs 实现钉钉ISV接入的加密解密方法
2017/01/16 NodeJs
JS创建Tag标签的方法详解
2017/06/09 Javascript
JavaScript设计模式之建造者模式实例教程
2018/07/02 Javascript
Vue表单绑定的实例代码(单选按钮,选择框(单选时,多选时,用 v-for 渲染的动态选项)
2019/05/13 Javascript
layer设置maxWidth及maxHeight解决方案
2019/07/26 Javascript
基于javascript实现贪吃蛇小游戏
2019/11/25 Javascript
Node.js API详解之 zlib模块用法分析
2020/05/19 Javascript
Echarts.js无法引入问题解决方案
2020/10/30 Javascript
[01:36:57]【09DOTA2第一视角】小骷髅
2014/04/16 DOTA
python3爬虫之设计签名小程序
2018/06/19 Python
Python过滤txt文件内重复内容的方法
2018/10/21 Python
关于python下cv.waitKey无响应的原因及解决方法
2019/01/10 Python
Python Tensor FLow简单使用方法实例详解
2020/01/14 Python
vscode+PyQt5安装详解步骤
2020/08/12 Python
宝拉珍选官方旗舰店:2%水杨酸精华液,收缩毛孔粗大和祛痘
2018/07/01 全球购物
Lungolivigno Fashion官网:高级时装在线购物
2020/10/17 全球购物
Java中会存在内存泄漏吗,请简单描述
2016/12/22 面试题
本科生个人求职自荐信
2013/09/26 职场文书
小学生寒假家长评语
2014/04/16 职场文书
施工协议书范本
2014/04/22 职场文书
材料成型及控制工程专业求职信
2014/06/19 职场文书
投资意向书
2014/07/30 职场文书
2014年维稳工作总结
2014/11/18 职场文书