<?php
/** 观察者 */
interface IObserver
{
function onChanged( $sender, $args );
}
/** 被观察者 */
interface IObservable
{
function addObserver( $observer );
}
/** 实现被观察者接口 */
class UserList implements IObservable
{
private $_observers = array();
/** 实现具体业务 */
public function addCustomer( $name )
{
//TODO 实现业务逻辑
//通知观察者
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" );
}
}
class sendMsg implements IObserver
{
public function onChanged($sender, $args)
{
/** 应用场景业务 */
echo ($args." send msg to user");
}
}
$ul = new UserList();
/** 添加应用场景 */
$ul->addObserver(new UserListLogger());
$ul->addObserver(new sendMsg());
/** 触发事件 */
$ul->addCustomer( "Arlin" );