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 相关文章推荐
php strlen mb_strlen计算中英文混排字符串长度
Jul 10 PHP
详解PHP中strlen和mb_strlen函数的区别
Mar 07 PHP
ThinkPHP模板输出display用法分析
Nov 26 PHP
php简单定时执行任务的实现方法
Feb 23 PHP
mod_php、FastCGI、PHP-FPM等PHP运行方式对比
Jul 02 PHP
PHP Try-catch 语句使用技巧
Feb 28 PHP
laravel学习教程之关联模型
Jul 30 PHP
php封装的smartyBC类完整实例
Oct 19 PHP
PHP实现时间比较和时间差计算的方法示例
Jul 24 PHP
Eclipse PHPEclipse 配置的具体步骤
Aug 08 PHP
PHP+redis实现的悲观锁机制示例
Jun 12 PHP
PHP基于timestamp和nonce实现的防止重放攻击方案分析
Jul 26 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用身份证号获取星座和生肖的方法
2013/11/07 PHP
PHP常用的缓存技术汇总
2014/05/05 PHP
php动态生成版权所有信息的方法
2015/03/24 PHP
PHP并发多进程处理利器Gearman使用介绍
2016/05/16 PHP
PHP PDO数据库操作预处理与注意事项
2019/03/16 PHP
setTimeout与setInterval在不同浏览器下的差异
2010/01/24 Javascript
基于jQuery选择器的整理集合
2013/04/26 Javascript
JQuery选择器绑定事件及修改内容的方法
2015/01/23 Javascript
jQuery动态添加及删除表单上传元素的方法(附demo源码下载)
2016/01/15 Javascript
更高效的使用JQuery 这里总结了8个小技巧
2016/04/13 Javascript
javascript数组去重方法分析
2016/12/15 Javascript
Javascript实现倒计时时差效果
2017/05/18 Javascript
jquery使用FormData实现异步上传文件
2018/10/25 jQuery
vue单页面实现当前页面刷新或跳转时提示保存
2018/11/02 Javascript
微信小程序实现写入读取缓存详解
2019/08/30 Javascript
vue实现简易的双向数据绑定
2020/12/29 Vue.js
[00:10]神之谴戒
2019/03/06 DOTA
使用相同的Apache实例来运行Django和Media文件
2015/07/22 Python
详解Python判定IP地址合法性的三种方法
2018/03/06 Python
numpy中矩阵合并的实例
2018/06/15 Python
使用CodeMirror实现Python3在线编辑器的示例代码
2019/01/14 Python
ubuntu 18.04搭建python环境(pycharm+anaconda)
2019/06/14 Python
Python中调用其他程序的方式详解
2019/08/06 Python
python运用pygame库实现双人弹球小游戏
2019/11/25 Python
Python如何读取、写入CSV数据
2020/07/28 Python
sklearn中的交叉验证的实现(Cross-Validation)
2021/02/22 Python
CSS3教程(5):网页背景图片
2009/04/02 HTML / CSS
施华洛世奇水晶荷兰官方网站:SWAROVSKI荷兰
2017/05/12 全球购物
FC-Moto美国:欧洲最大的摩托车服装和头盔商店之一
2019/08/24 全球购物
C,C++的几个面试题小集
2013/07/13 面试题
学期自我评价
2014/01/27 职场文书
材料专业毕业生求职信
2014/02/26 职场文书
纪念九一八事变演讲稿1000字
2014/09/14 职场文书
运动会1000米加油稿
2015/07/21 职场文书
MySQL 如何限制一张表的记录数
2021/09/14 MySQL
Android 中的类文件和类加载器详情
2022/06/05 Java/Android