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 相关文章推荐
解决中英文字符串长度问题函数
Jan 16 PHP
一个简单的PHP&amp;MYSQL留言板源码
Jul 19 PHP
php Undefined index和Undefined variable的解决方法
Mar 27 PHP
PHP测试程序运行时间的类
Feb 05 PHP
PHP 第二节 数据类型之转换
Apr 28 PHP
PHP 5.5 创建和验证哈希最简单的方法详解
Nov 07 PHP
php过滤所有恶意字符(批量过滤post,get敏感数据)
Mar 18 PHP
ThinkPHP 表单自动验证运用示例
Oct 13 PHP
php通过curl添加cookie伪造登陆抓取数据的方法
Apr 02 PHP
php实现基于PDO的预处理示例
Mar 28 PHP
PHP中常用的魔术方法
Apr 28 PHP
laravel实现分页样式替换示例代码(增加首、尾页)
Sep 22 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
同时提取多条新闻中的文本一例
2006/10/09 PHP
解析strtr函数的效率问题
2013/06/26 PHP
php数据库操作model类(使用__call方法)
2016/11/16 PHP
thinkphp实现附件上传功能
2017/05/26 PHP
ThinkPHP框架表单验证操作方法
2017/07/19 PHP
PHP实现图片压缩
2020/09/09 PHP
超级强大的表单验证
2006/06/26 Javascript
Javascript 判断客户端浏览器类型代码
2010/03/01 Javascript
javascript学习笔记(四) Number 数字类型
2012/06/19 Javascript
jQuery实现动画效果的实例代码
2013/05/07 Javascript
JS获取URL中的参数数据
2013/12/05 Javascript
js获取json元素数量的方法
2015/01/27 Javascript
jQuery EasyUI datagrid实现本地分页的方法
2015/02/13 Javascript
简单介绍JavaScript中字符串创建的基本方法
2015/07/07 Javascript
jQuery中常用的遍历函数用法实例总结
2015/09/01 Javascript
JS中Map和ForEach的区别
2018/02/05 Javascript
详解vue-cli项目中的proxyTable跨域问题小结
2018/02/09 Javascript
详解如何创建并发布一个 vue 组件
2018/11/08 Javascript
vue 中 命名视图的用法实例详解
2019/08/14 Javascript
vue实现权限控制路由(vue-router 动态添加路由)
2019/11/04 Javascript
webpack是如何实现模块化加载的方法
2019/11/06 Javascript
JS绘图Flot如何实现动态可刷新曲线图
2020/10/16 Javascript
Pyhthon中使用compileall模块编译源文件为pyc文件
2015/04/28 Python
Python中单线程、多线程和多进程的效率对比实验实例
2019/05/14 Python
解决Python中回文数和质数的问题
2019/11/24 Python
Python创建一个元素都为0的列表实例
2019/11/28 Python
css3旋转木马_动力节点Java学院整理
2017/07/12 HTML / CSS
HTML5 canvas画图并保存成图片的jcanvas插件
2014/01/17 HTML / CSS
澳大利亚最大的女装零售商:Millers
2017/09/10 全球购物
英国快时尚女装购物网站:PrettyLittleThing
2018/08/15 全球购物
英语道歉信范文
2014/01/09 职场文书
求职面试个人自我评价
2014/02/28 职场文书
荷叶母亲教学反思
2014/04/30 职场文书
学习经验演讲稿
2014/05/10 职场文书
redis requires ruby version2.2.2的解决方案
2021/07/15 Redis
基于Python实现一个春节倒计时脚本
2022/01/22 Python