快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-25
中的用户列表。清单 4 中的代码显示一个用户列表,添加用户时,它将发送出一条消息。添加用户时,通过发送消息的日志观察者可以观察此列表。

  清单 4. Observer.php

<?php
interface IObserver
{
 function onChanged( $sender, $args );
}

interface IObservable
{
 function addObserver( $observer );
}

class UserList implements IObservable
{
 private 更好的构造开发模板 五种PHP设计模式 - 凌众科技
快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-25
content

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号

observers = array();

 public function addCustomer( $name )
 {
  foreach( $this->_observers as $obs )
  $obs->onChanged( $this, $name );
 }

 public function addObserver( $observer )
 {
  $this->_observers []= $observer;
 }
}

class UserListLogger implements IObserver
{
 public function onChanged( $sender, $args )
 {
  echo( "''$args'' added to user list\n" );
 }
}

$ul = new UserList();
$ul->addObserver( new UserListLogger() );
$ul->addCustomer( "Jack" );
?>

  此代码定义四个元素:两个接口和两个类。IObservable 接口定义可以被观察的对象,UserList 实现该接口,以便将本身注册为可观察。IObserver 列表定义要通过怎样的方法才能成为观察者,UserListLogger 实现 IObserver 接口。图 4 的 UML 中展示了这些元素。


图 4. 可观察的用户列表和用户列表事件日志程序

  如果在命令行中运行它,您将看到以下输出:

% php observer.php
''Jack'' added to user list
%

  测试代码创建 UserList,并将 UserListLogger 观察者添加到其中。然后添加一个消费者,并将这一更改通知 UserListLogger。

  认识到 UserList 不知道日志程序将执行什么操作很关键。可能存在一个或多个执行其他操作的侦听程序。例如,您可能有一个向新用户发送消息的观察者,欢迎新用户使用该系统。这种方法的价值在于 UserList 忽略所有依赖它的对象,它主要关注在列表更改时维护用户列表并发送消息这一工作。

  此模式不限于内存中的对象。它是在较大的应用程序中使用的数据库驱动的消息查询系统的基础。

  命令链模式

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

  清单 5. Chain.php

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

class CommandChain
{
 private 更好的构造开发模板 五种PHP设计模式 - 凌众科技
快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-25
content

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号

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 接口 —— 一个对邮件的请求作出响应,另一个对添加用户作出

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号