科技行者

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

知识库

知识库 安全导航

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

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

  • 扫一扫
    分享文章到微信

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

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

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

关键字:

  • 评论
  • 分享微博
  • 分享邮件
观察者模式

  观察者模式为您提供了避免组件之间紧密耦合的另一种方法。该模式非常简单:一个对象通过添加一个方法(该方法允许另一个对象,即观察者 注册自己)使本身变得可观察。当可观察的对象更改时,它会将消息发送到已注册的观察者。这些观察者使用该信息执行的操作与可观察的对象无关。结果是对象可以相互对话,而不必了解原因。 一个简单示例是系统中的用户列表。清单 4 中的代码显示一个用户列表,添加用户时,它将发送出一条消息。添加用户时,通过发送消息的日志观察者可以观察此列表。

  清单 4. Observer.php

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

interface IObservable
{
 function addObserver( $observer );
}

class UserList implements IObservable
{
 private $_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 忽略所有依赖它的对象,它主要关注在列表更改时维护用户列表并发送消息这一工作。

  此模式不限于内存中的对象。它是在较大的应用程序中使用的数据库驱动的消息查询系统的基础。
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

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

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