天天看点

PHP设计模式-观察者模式

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