linux社区爱心援助Linux认证系列教程业界动态站务新闻公司招聘建议留言网址大全LPI专题CISCO专题
设为首页
加入收藏
管理团队
JSP  
JAVA  
PERL  
 您的位置:首页 > 开发语言 > php >
栏目导栏
  php
  JSP
  ASP
  asp.net
  JAVA
  c/c++/c#
  perl
  JavaScript
  Basic
  Delphi
资料搜索
热门文章
·PHP生成静态页面的一些经验
·PHP无限分类与树型论坛的实现方
·php5学习笔记
·入门级PHP程序员面试题
·PHP 和 MySQL初学入门
·PHP入门速成
·vim的代码折叠
·文件下载统计php编程代码
·如何建立自己的新闻发布系统
·织梦CMS中文转换拼音函数研究
·Windows下Apache+Tomcat+MySQL
·PHP初学者头疼问题总结
·Cookie及其使用详细介绍
·生成sessionid和随机密码的例子
·使用无限生命期Session的方法
最新文章
·PHP入门速成
·用php实现广告轮播
·Zend Optimizer 问题浅析
·功能强大的CGI语言----PHP3
·用Session对Web页面进行保护
·PHP--进行模块化设计
·如何将PHP的结果输出到非PHP页
·如何开发一个虚拟域名系统
·PHP4调用自己编写的COM组件
·简单的页面缓冲技术(三)
·简单的页面缓冲技术(二)
·简单的页面缓冲技术(一)
·用Socket发送电子邮件(二)
·用Socket发送电子邮件(一)
·PHP/MySQL 购物车
Google
 
更好的构造开发模板 五种PHP设计模式3
[ 作者:  加入时间:2007-11-22 17:08:06  来自:Linux联盟收集整理 ]
观察者模式 YwVLinux联盟
   YwVLinux联盟
    观察者模式为您提供了避免组件之间紧密耦合的另一种方法。该模式非常简单:一个对象通过添加一个方法(该方法允许另一个对象,即观察者 注册自己)使本身变得可观察。当可观察的对象更改时,它会将消息发送到已注册的观察者。这些观察者使用该信息执行的操作与可观察的对象无关。结果是对象可以相互对话,而不必了解原因。 一个简单示例是系统中的用户列表。清单 4 中的代码显示一个用户列表,添加用户时,它将发送出一条消息。添加用户时,通过发送消息的日志观察者可以观察此列表。 YwVLinux联盟
   YwVLinux联盟
    清单 4. Observer.php YwVLinux联盟
   YwVLinux联盟
  <?php YwVLinux联盟
  interface IObserver YwVLinux联盟
  { YwVLinux联盟
   function onChanged( $sender, $args ); YwVLinux联盟
  } YwVLinux联盟
   YwVLinux联盟
  interface IObservable YwVLinux联盟
  { YwVLinux联盟
   function addObserver( $observer ); YwVLinux联盟
  } YwVLinux联盟
   YwVLinux联盟
  class UserList implements IObservable YwVLinux联盟
  { YwVLinux联盟
   private $_observers = array(); YwVLinux联盟
   YwVLinux联盟
   public function addCustomer( $name ) YwVLinux联盟
   { YwVLinux联盟
    foreach( $this->_observers as $obs ) YwVLinux联盟
    $obs->onChanged( $this, $name ); YwVLinux联盟
   } YwVLinux联盟
   YwVLinux联盟
   public function addObserver( $observer ) YwVLinux联盟
   { YwVLinux联盟
    $this->_observers []= $observer; YwVLinux联盟
   } YwVLinux联盟
  } YwVLinux联盟
   YwVLinux联盟
  class UserListLogger implements IObserver YwVLinux联盟
  { YwVLinux联盟
   public function onChanged( $sender, $args ) YwVLinux联盟
   { YwVLinux联盟
    echo( "'$args' added to user list\n" ); YwVLinux联盟
   } YwVLinux联盟
  } YwVLinux联盟
   YwVLinux联盟
  $ul = new UserList(); YwVLinux联盟
  $ul->addObserver( new UserListLogger() ); YwVLinux联盟
  $ul->addCustomer( "Jack" ); YwVLinux联盟
  ?> YwVLinux联盟
   YwVLinux联盟
    此代码定义四个元素:两个接口和两个类。IObservable 接口定义可以被观察的对象,UserList 实现该接口,以便将本身注册为可观察。IObserver 列表定义要通过怎样的方法才能成为观察者,UserListLogger 实现 IObserver 接口。图 4 的 UML 中展示了这些元素。 YwVLinux联盟
   YwVLinux联盟
  图 4. 可观察的用户列表和用户列表事件日志程序 YwVLinux联盟
   YwVLinux联盟
    如果在命令行中运行它,您将看到以下输出: YwVLinux联盟
   YwVLinux联盟
  % php observer.php YwVLinux联盟
  'Jack' added to user list YwVLinux联盟
  % YwVLinux联盟
   YwVLinux联盟
    测试代码创建 UserList,并将 UserListLogger 观察者添加到其中。然后添加一个消费者,并将这一更改通知 UserListLogger。 YwVLinux联盟
   YwVLinux联盟
    认识到 UserList 不知道日志程序将执行什么操作很关键。可能存在一个或多个执行其他操作的侦听程序。例如,您可能有一个向新用户发送消息的观察者,欢迎新用户使用该系统。这种方法的价值在于 UserList 忽略所有依赖它的对象,它主要关注在列表更改时维护用户列表并发送消息这一工作。 YwVLinux联盟
   YwVLinux联盟
    此模式不限于内存中的对象。它是在较大的应用程序中使用的数据库驱动的消息查询系统的基础。 Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·更好的构造开发模板 五种PHP设计模式2  (2007-11-22 17:07:31)
 ·更好的构造开发模板 五种PHP设计模式1  (2007-11-22 17:07:02)
 ·更好的构造开发模板 五种PHP设计模式  (2007-08-28 10:20:24)