<?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" );
?>

mpeg的网站地址为:www.phpubb.com

更多介绍,请参考MSDN网站:http://msdn.microsoft.com/zh-cn/library/ms954621.aspx

以下是部分内容:

观察者模式

面向对象的开发的一个主导原则是,在给定的应用程序中正确地分配任务。 系统中的每个对象应该将重点放在问题域中的离散抽象上,而不是放在任何其它方面。 简而言之,一个对象只应做一件事,而且要将它做好。 这种方法可确保在对象之间划定清晰的界限,因而可提供更高的重用性和系统可维护性。

一个正确划分任务特别重要的领域就是,用户界面和基础业务逻辑之间的交互。 在应用程序的开发过程中,需要快速更改用户界面要求,并且不会对应用程序的其他部分产生连带影响,这是司空见惯的事。 此外,业务要求也可能会发生变化,而这一切与用户界面无关。 具有丰富开发经验的人都知道,在很多情况下,这两组要求都会发生变化。 如果没有划分 UI 和应用程序其他部分,修改任一部分都会对整体造成不利的影响。

很多应用程序都会遇到以下常见问题:需要在用户界面和业务逻辑之间划分清晰的界限。 因此,自 GUI 出现以后开发的很多面向对象的框架均支持将用户界面从应用程序的其他部分中划分出来。 不要惊讶(可能有一点),其中的大部分应用程序采用类似的设计模式来提供此功能。 这种模式通常称为观察者,它在系统中的各种对象之间划分清晰的界限方面非常有利。 此外,还会经常看到在框架或应用程序中与 UI 无关的部分中使用这种解决方案。 正如大多数其他模式一样,观察者模式的作用远远超过了其最初的想法。

逻辑模型

虽然观察者模式有很多变体,但该模式的基本前提包含两个角色:观察者和主体(熟悉 Smalltalk MVC 的人将这些术语分别称为视图和模型)。 在用户界面的环境中,观察者是负责向用户显示数据的对象。 另一方面,主体表示从问题域中模拟的业务抽象。 正如图 1 中所描述的一样, 在观察者和主体之间存在逻辑关联。 当主体对象中发生更改时,(例如,修改实例变量),观察者就会观察 这种更改,并相应地更新其显示。