php设计模式之命令模式的应用详解


Posted in PHP onMay 21, 2013

命令模式:将一个请求封装为一个对象,从而你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销操作。
命令类:
1.命令角色:声明了一个给所有具体命令类的抽象接口。这是一个抽象角色。
2.具体命令角色:定义一个接受者和行为之间的弱耦合;实现execute方法,负责调用接受的相应操作。execute()方法通常叫做执行方法
3.客户角色:创建一个具体命令对象并确定其接受者。
4.请求者角色:负责调用命令对象执行请求,相关的方法叫做行动方法。
5.接受者角色:负责具体实施和执行一个请求。
作用:
1.抽象出待执行的动作以参数化对象。
2.在不同的时刻指定、排列和执行请求。
3.支持取消操作
4.支持修改日志

<?php
//命令接口
interface Command{
     public function execute();
}
//具体命令
class ConcreteCommand implements Command{
     private $_receiver;
     public function __construct($receiver){
          $this->_receiver = $receiver;
     }
     public function execute(){
          $this->_receiver->action();
     }
}//接受者
class Receiver{
     private $_name;
     public function __construct($name){
          $this->_name = $name;
     }
     //行动方法
     public function action(){
          echo $this->_name.'do action .<br/>';
     }
}
//请求者
class Invoker{
     private $_command;
     public function __construct($command){
          $this->_command = $command;
     }
     public function action(){
          $this->_command->execute();
     }
}
//客户端
class  Client{
     public static function main(){
          $receiver = new Receiver('jaky');
          $command = new ConcreteeCommand($receiver);
          $invoker = new Invoker($command);
          $invoker->action();
     }
}
Client::main();
?>
PHP 相关文章推荐
也谈截取首页新闻 - 范例
Oct 09 PHP
PHP5.2下chunk_split()函数整数溢出漏洞 分析
Jun 06 PHP
Apache中php.ini的设置方法
Feb 28 PHP
PHP四舍五入精确小数位及取整
Jan 14 PHP
php中memcache 基本操作实例
May 17 PHP
php curl模拟post请求和提交多维数组的示例代码
Nov 19 PHP
PHP使用MPDF类生成PDF的方法
Dec 08 PHP
9个比较实用的php代码片段
Mar 15 PHP
php similar_text()函数的定义和用法
May 12 PHP
thinkPHP多域名情况下使用memcache方式共享session数据的实现方法
Jul 21 PHP
浅谈Laravel中的三种中间件的作用
Oct 13 PHP
通过PHP实现获取访问用户IP
May 09 PHP
浅谈PHP与C#的值类型指向区别的详解
May 21 #PHP
PHP无法访问远程mysql的问题分析及解决
May 16 #PHP
基于PHP字符串的比较函数strcmp()与strcasecmp()的使用详解
May 15 #PHP
解析dedecms空间迁移步骤详解
May 15 #PHP
基于php缓存的详解
May 15 #PHP
解析php中mysql_connect与mysql_pconncet的区别详解
May 15 #PHP
深入php之规范编程命名小结
May 15 #PHP
You might like
PHP 超链接 抓取实现代码
2009/06/29 PHP
php strrpos()与strripos()函数
2013/08/31 PHP
php实现有趣的人品测试程序实例
2015/06/08 PHP
php+html5+ajax实现上传图片的方法
2016/05/14 PHP
PHP实现普通hash分布式算法简单示例
2018/08/06 PHP
php 与 nginx 的处理方式及nginx与php-fpm通信的两种方式
2018/09/28 PHP
基于laravel Request的所有方法详解
2019/09/29 PHP
有关PHP 中 config.m4 的探索
2020/08/26 PHP
javascript支持firefox,ie7页面布局拖拽效果代码
2007/12/20 Javascript
基于jQuery的图片剪切插件
2011/08/03 Javascript
JsDom 编程小结
2011/08/09 Javascript
JS+CSS实现类似QQ好友及黑名单效果的树型菜单
2015/09/22 Javascript
基于JavaScript实现移除(删除)数组中指定元素
2016/01/04 Javascript
JavaScript中获取纯正的undefined的方法
2016/03/06 Javascript
AngularJS入门教程之双向绑定详解
2016/08/18 Javascript
js实现年月日表单三级联动
2020/04/17 Javascript
从零开始学习Node.js系列教程四:多页面实现数学运算的client端和server端示例
2017/04/13 Javascript
微信小程序实战之自定义抽屉菜单(7)
2017/04/18 Javascript
[02:04]完美世界城市挑战赛秋季赛报名开始 谁是solo路人王?
2019/10/10 DOTA
Python计算一个文件里字数的方法
2015/06/15 Python
Python生成任意范围任意精度的随机数方法
2018/04/09 Python
Python Dataframe 指定多列去重、求差集的方法
2018/07/10 Python
python爬虫之线程池和进程池功能与用法详解
2018/08/02 Python
python 拼接文件路径的方法
2018/10/23 Python
解决pyqt5异常退出无提示信息的问题
2020/04/08 Python
Canvas制作的下雨动画的示例
2018/03/06 HTML / CSS
英国最大的纸工艺品商店:CraftStash
2018/12/01 全球购物
工程造价专业大学生自荐信
2013/10/01 职场文书
教师申诉制度
2014/01/29 职场文书
宣传口号大全
2014/06/16 职场文书
2014年乡镇工会工作总结
2014/12/02 职场文书
客户付款通知书
2015/04/23 职场文书
导游词之杭州西湖
2019/09/19 职场文书
Redis字典实现、Hash键冲突及渐进式rehash详解
2021/09/04 Redis
我的收音机情缘
2022/04/05 无线电
Win11 PC上的Outlook搜索错误怎么办?
2022/07/15 数码科技