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 相关文章推荐
Mysql和网页显示乱码解决方法集锦
Mar 27 PHP
ie6 动态缩略图不显示的原因
Jun 21 PHP
PHP 简单数组排序实现代码
Aug 05 PHP
PHP header()函数使用详细(301、404等错误设置)
Apr 17 PHP
PHP中一些可以替代正则表达式函数的字符串操作函数
Nov 17 PHP
PHP中开启gzip压缩的2种方法
Jan 31 PHP
smarty模板引擎之内建函数用法
Mar 30 PHP
使用PHP uniqid函数生成唯一ID
Nov 18 PHP
PHP数据库操作Helper类完整实例
May 11 PHP
PHP如何实现跨域
May 30 PHP
Docker配置PHP开发环境教程
Dec 21 PHP
ThinkPHP 3.2.2实现事务操作的方法
May 05 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函数)
2006/10/09 PHP
Yii框架批量插入数据扩展类的简单实现方法
2017/05/23 PHP
laravel Model 执行事务的实现
2019/10/10 PHP
拖动一个HTML元素
2006/12/22 Javascript
jQuery学习基础知识小结
2010/11/25 Javascript
Js 弹出框口并返回值的两种常用方法
2010/12/30 Javascript
关于jQuery的inArray 方法介绍
2011/10/08 Javascript
使用jQuery避免鼠标双击的解决方案
2013/08/21 Javascript
javascript自定义startWith()和endWith()的两种方法
2013/11/11 Javascript
JS实现的用来对比两个用指定分隔符分割的字符串是否相同
2014/09/19 Javascript
JavaScript中的style.cssText使用教程
2014/11/06 Javascript
javascript实现uploadify上传格式以及个数限制
2015/11/23 Javascript
使用jQuery中的wrap()函数操作HTML元素的教程
2016/05/24 Javascript
vue2.0实现导航菜单切换效果
2017/05/08 Javascript
Angular(5.2-&gt;6.1)升级小结
2018/12/27 Javascript
vue实现歌手列表字母排序下拉滚动条侧栏排序实时更新
2019/05/14 Javascript
微信小程序webview与h5通过postMessage实现实时通讯的实现
2019/08/20 Javascript
Vue登录拦截 登录后继续跳转指定页面的操作
2020/08/04 Javascript
小程序实现点击tab切换左右滑动
2020/11/16 Javascript
详解Python设计模式编程中观察者模式与策略模式的运用
2016/03/02 Python
使用Python向C语言的链接库传递数组、结构体、指针类型的数据
2019/01/29 Python
Python脚本如何在bilibili中查找弹幕发送者
2020/06/04 Python
如何利用Python写个坦克大战
2020/11/18 Python
python录音并调用百度语音识别接口的示例
2020/12/01 Python
html5的画布canvas——画出简单的矩形、三角形实例代码
2013/06/09 HTML / CSS
Silk’n激光脱毛器官网:silkn.com
2016/10/06 全球购物
KIKO美国官网:意大利的平价彩妆品牌
2017/05/16 全球购物
META-INF文件夹中的MANIFEST.MF的作用
2016/06/21 面试题
毕业求职自荐信格式是什么
2013/11/19 职场文书
优秀研究生自我鉴定
2013/12/04 职场文书
优秀团员自我评价范文
2014/04/23 职场文书
村长反四风问题个人对照检查材料
2014/09/21 职场文书
2016猴年春节慰问信
2015/11/30 职场文书
中职班主任培训心得体会
2016/01/07 职场文书
小学家庭教育心得体会
2016/01/14 职场文书
VUE解决跨域问题Access to XMLHttpRequest at
2022/05/06 Vue.js