科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道应用软件更好的构造开发模板 五种PHP设计模式

更好的构造开发模板 五种PHP设计模式

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

设计模式只是为 Java 架构师准备的 —— 至少您可能一直这样认为。实际上,设计模式对于每个人都非常有用。

作者:Jack Herrington 来源:IBM 2007年10月21日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
命令链模式

  命令链 模式以松散耦合主题为基础,发送消息、命令和请求,或通过一组处理程序发送任意内容。每个处理程序都会自行判断自己能否处理请求。如果可以,该请求被处理,进程停止。您可以为系统添加或移除处理程序,而不影响其他处理程序。清单 5 显示了此模式的一个示例。

  清单 5. Chain.php

<?php
interface ICommand
{
 function onCommand( $name, $args );
}

class CommandChain
{
 private $_commands = array();

 public function addCommand( $cmd )
 {
  $this->_commands []= $cmd;
 }

 public function runCommand( $name, $args )
 {
  foreach( $this->_commands as $cmd )
  {
   if ( $cmd->onCommand( $name, $args ) )
    return;
  }
 }
}

class UserCommand implements ICommand
{
 public function onCommand( $name, $args )
 {
  if ( $name != 'addUser' ) return false;
  echo( "UserCommand handling 'addUser'\n" );
  return true;
 }
}

class MailCommand implements ICommand
{
 public function onCommand( $name, $args )
 {
  if ( $name != 'mail' ) return false;
  echo( "MailCommand handling 'mail'\n" );
  return true;
 }
}

$cc = new CommandChain();
$cc->addCommand( new UserCommand() );
$cc->addCommand( new MailCommand() );
$cc->runCommand( 'addUser', null );
$cc->runCommand( 'mail', null );
?>

  此代码定义维护 ICommand 对象列表的 CommandChain 类。两个类都可以实现 ICommand 接口 —— 一个对邮件的请求作出响应,另一个对添加用户作出响应。 图 5 给出了 UML。


图 5. 命令链及其相关命令

  如果您运行包含某些测试代码的脚本,则会得到以下输出:

% php chain.php
UserCommand handling 'addUser'
MailCommand handling 'mail'
%

  代码首先创建 CommandChain 对象,并为它添加两个命令对象的实例。然后运行两个命令以查看谁对这些命令作出了响应。如果命令的名称匹配 UserCommand 或 MailCommand,则代码失败,不发生任何操作。 为处理请求而创建可扩展的架构时,命令链模式很有价值,使用它可以解决许多问题。
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章