PHP设计模式之命令模式的深入解析

2015-01-24信息快讯网

本篇文章是对PHP设计模式中的命令模式进行了详细的分析介绍,需要的朋友参考下

命令模式(Command),命令模式是封装一个通用操作的机制。

如果你熟悉C或PHP,你可能已经遇到过Command,它相当于程序中的:回调(callback)。回调通常使用一个函数指针或数据结构如PHP中的字符串和数组实现,Command是在一个方法调用之上的抽象,它吸收了所有面向对象的好处:合成、继承和处理。

例如,《设计模式》一书推荐使用Command存储用户行为链,以支持撤销和重做操作。

注意PHP 5.3函数编程能力(闭包)可以被当做Command模式的一个本地实现,但为每一个命令层次结构使用抽象数据类型有助于类型安全。

PHP设计模式之命令模式的深入解析_信息快讯网

在这个模式中,Invoker(调用者)知道传递给它的Command,无需依赖于真实的ConcreteCommand(具体的命令)实现,解决了通过配置进行方法调用相关的问题,如UI控件按钮和菜单等引用一个Command,它们的行为是通过通用的ConcreteCommand实例呈现的。
参与者:
◆Command(命令):在一个方法调用之上定义一个抽象;
◆ConcreteCommand(具体的命令):一个操作的实现;
◆Invoker(调用者):引用Command实例作为它可用的操作。
下面的代码展示了Validator组件作为Command对象实现的示例:
/**  
 * The Command abstraction.  
 * In this case the implementation must return a result,  
 * sometimes it only has side effects.  
 */ 
interface Validator  
{  
    /**  
     * The method could have any parameters.  
     * @param mixed  
     * @return boolean  
     */ 
    public function isValid($value);  
}  

/**  
 * ConcreteCommand.  
 */ 
class MoreThanZeroValidator implements Validator  
{  
    public function isValid($value)  
    {  
        return $value > 0;  
    }  
}  

/**  
 * ConcreteCommand.  
 */ 
class EvenValidator implements Validator  
{  
    public function isValid($value)  
    {  
        return $value % 2 == 0;  
    }  
}  

/**  
 * The Invoker. An implementation could store more than one  
 * Validator if needed.  
 */ 
class ArrayProcessor  
{  
    protected $_rule;  

    public function __construct (Validator $rule)  
    {  
        $this->_rule = $rule;  
    }  

    public function process(array $numbers)  
    {  
        foreach ($numbers as $n) {  
            if ($this->_rule->IsValid($n)) {  
                echo $n, "\n";  
            }  
        }  
    }  
}  

// Client code  
$processor = new ArrayProcessor(new EvenValidator());  
$processor->process(array(1, 20, 18, 5, 0, 31, 42)); 

使用PHP设计模式中的命令模式的一些注意事项:
◆方法调用中的某些参数可以在构造ConcreteCommand时提供,有效地局部套用(currying)原始函数;
◆一个Command可以被看作是一个非常简单的只有一个方法的策略(Strategy),重点放在对象的操作上;
◆ConcreteCommands也要组织它们需要的每一个资源,以实现它们的目标,主要是行为的Receiver(接受者),它们调用方法执行一个Command;
◆复合模式,装饰模式和其它模式都可以和命令模式组合,获得更多的Command,装饰Command等等。
php设计模式之命令模式使用示例
php获取文件内容最后一行示例
php权重计算方法代码分享
php实现分页工具类分享
eaglephp使用微信api接口开发微信框架
利用phpexcel把excel导入数据库和数据库导出excel实现
浅析ThinkPHP中的pathinfo模式和URL重写
PHP运行SVN命令显示某用户的文件更新记录的代码
php使用exec shell命令注入的方法讲解
php模拟ping命令(php exec函数的使用方法)
PHP系统命令函数使用分析
php设计模式之单例、多例设计模式的应用分析
浅析memcache启动以及telnet命令详解
PHP多例模式介绍
解析php中的fopen()函数用打开文件模式说明
解析PHP中的正则表达式以及模式匹配
PHP设计模式之结构模式的深入解析
深入Memcache的Session数据的多服务器共享详解
探讨:如何使用PHP实现计算两个日期间隔的年、月、周、日数
判断php数组是否为索引数组的实现方法
PHP 基于Yii框架中使用smarty模板的方法详解
关于PHP二进制流 逐bit的低位在前算法(详解)
php读取二进制流(C语言结构体struct数据文件)的深入解析
PHP CLI模式下的多进程应用分析
php cli模式学习(PHP命令行模式)
深入php-fpm的两种进程管理模式详解
基于php在各种web服务器的运行模式详解
PHP运行模式的深入理解
基于Linux调试工具strace与gdb的常用命令总结
linux命令之调试工具strace的深入分析
php设计模式之命令模式的应用详解
PHP调用Linux的命令行执行文件压缩命令
©2014-2024 dbsqp.com