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的curl实现get和post的代码
Aug 23 PHP
PHP 数组教程 定义数组
Oct 23 PHP
MYSQL 小技巧 -- LAST_INSERT_ID
Nov 24 PHP
浅析使用Turck-mmcache编译来加速、优化PHP代码
Jun 20 PHP
简单的php文件上传(实例)
Oct 27 PHP
设置php页面编码的两种方法示例介绍
Mar 03 PHP
从零开始学YII2框架(三)扩展插件yii2-gird
Aug 20 PHP
PHP抓取网页、解析HTML常用的方法总结
Jul 01 PHP
PHP处理会话函数大总结
Aug 05 PHP
PHP7+Nginx的配置与安装教程详解
May 10 PHP
php中字符串和整数比较的操作方法
Jun 06 PHP
PHP pthreads v3在centos7平台下的安装与配置操作方法
Feb 21 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/03/27 PHP
学习php设计模式 php实现策略模式(strategy)
2015/12/07 PHP
JS BASE64编码 window.atob(), window.btoa()
2021/03/09 Javascript
jquery实现商品拖动选择效果代码(自写)
2013/05/28 Javascript
js实现点小图看大图效果的思路及示例代码
2013/10/28 Javascript
Javascript设置对象的ReadOnly属性(示例代码)
2013/12/25 Javascript
JSONP跨域GET请求解决Ajax跨域访问问题
2014/12/31 Javascript
基于Jquery实现表单验证
2020/07/20 Javascript
前端框架Vue.js构建大型应用浅析
2016/09/12 Javascript
详解如何将 Vue-cli 改造成支持多页面的 history 模式
2017/11/20 Javascript
使用vue-cli webpack 快速搭建项目的代码
2018/11/21 Javascript
Python使用xlrd读取Excel格式文件的方法
2015/03/10 Python
在Python中处理XML的教程
2015/04/29 Python
简单实现python爬虫功能
2015/12/31 Python
Python3调用微信企业号API发送文本消息代码示例
2017/11/10 Python
Python单元测试简单示例
2018/07/03 Python
numpy.where() 用法详解
2019/05/27 Python
简单了解python反射机制的一些知识
2019/07/13 Python
运用PyTorch动手搭建一个共享单车预测器
2019/08/06 Python
Python 实现一个手机号码获取妹子名字的功能
2019/09/25 Python
解决pyinstaller 打包exe文件太大,用pipenv 缩小exe的问题
2020/07/13 Python
python设置表格边框的具体方法
2020/07/17 Python
python爬虫用scrapy获取影片的实例分析
2020/11/23 Python
html5 css3网站菜单实现代码
2013/12/23 HTML / CSS
彪马日本官网:PUMA日本
2019/01/31 全球购物
Nebula美国官网:便携式投影仪
2019/03/15 全球购物
火山咖啡:Volcanica Coffee
2019/10/29 全球购物
在C#中如何实现多态
2014/07/02 面试题
J2EE中的容器都包括哪些
2013/08/21 面试题
国际贸易专业个人求职信范文分享
2013/12/14 职场文书
残疾人小组计划书
2014/04/27 职场文书
五四青年节的活动方案
2014/08/20 职场文书
工作经常出错的检讨书
2014/09/13 职场文书
小学数学新课改心得体会
2016/01/22 职场文书
劳务派遣管理制度(样本)
2019/08/23 职场文书
MySQL查询日期时间
2022/05/15 MySQL