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