源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2021-04-08 04:52 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:PHP设计模式之命令模式的深入解析
命令模式(Command),命令模式是封装一个通用操作的机制。 如果你熟悉C或PHP,你可能已经遇到过Command,它相当于程序中的:回调(callback)。回调通常使用一个函数指针或数据结构如PHP中的字符串和数组实现,Command是在一个方法调用之上的抽象,它吸收了所有面向对象的好处:合成、继承和处理。 例如,《设计模式》一书推荐使用Command存储用户行为链,以支持撤销和重做操作。 注意PHP 5.3函数编程能力(闭包)可以被当做Command模式的一个本地实现,但为每一个命令层次结构使用抽象数据类型有助于类型安全。 [img]http://files.jb51.net/file_images/article/201306/201306131530289.jpg[/img] 在这个模式中,Invoker(调用者)知道传递给它的Command,无需依赖于真实的ConcreteCommand(具体的命令)实现,解决了通过配置进行方法调用相关的问题,如UI控件按钮和菜单等引用一个Command,它们的行为是通过通用的ConcreteCommand实例呈现的。 [b]参与者: [/b]◆Command(命令):在一个方法调用之上定义一个抽象; ◆ConcreteCommand(具体的命令):一个操作的实现; ◆Invoker(调用者):引用Command实例作为它可用的操作。 下面的代码展示了Validator组件作为Command对象实现的示例:
[u]复制代码[/u] 代码如下:
/**   * 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));
[b]使用PHP设计模式中的命令模式的一些注意事项: [/b]◆方法调用中的某些参数可以在构造ConcreteCommand时提供,有效地局部套用(currying)原始函数; ◆一个Command可以被看作是一个非常简单的只有一个方法的策略(Strategy),重点放在对象的操作上; ◆ConcreteCommands也要组织它们需要的每一个资源,以实现它们的目标,主要是行为的Receiver(接受者),它们调用方法执行一个Command; ◆复合模式,装饰模式和其它模式都可以和命令模式组合,获得更多的Command,装饰Command等等。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部