观察者模式-订报纸,语音呼叫系统实例

<?php
/**
 * 观察者模式
 */

/**
 * 专门负责观察的类--主呼叫系统
 * 1、记录要提醒的对象的名字
 * 2、循环调用记录的对象们的一个同名的方法,这个方法具体做什么事情它们自己去决定
 */
class Paper
{ 
    private $_observers = array();
    public function register($sub)/*录入要提醒的人的名单*/
    { 
        $this->_observers[] = $sub;
    }
    public function trigger()/*统一提醒功能*/
    {  
        if(!empty($this->_observers))
        {
            foreach($this->_observers as $observer)
            {
                $observer->update();//记录的对象们的一个同名的方法,‘同名’用接口来规范
            }
        }
    }
}
 
/**
 * 观察者们,必须要实现的接口
 */
interface Observerable
{
    public function update();
}
 
class Subscriber1 implements Observerable
{
    public function update()
    {
        echo '我是1号,主呼叫系统在call我,我该做点什么事情了^_^
';
    }
}

class Subscriber2 implements Observerable
{
    public function update()
    {
        echo '我是2号,主呼叫系统在call我,我该做点什么事情了^_^
';
    }
}

class Subscriber3 implements Observerable
{
    public function update()
    {
        echo '我是3号,主呼叫系统在call我,我该做点什么事情了^_^
';
    }
}

 
/*测试*/
$paper = new Paper();//呼叫系统
$paper->register(new Subscriber1());//注册观察者
$paper->register(new Subscriber2());
$paper->register(new Subscriber3());
$paper->trigger();//呼叫系统通知各个观察者,这个动作可以由外界的某件事情来触发,比如到了推送报纸的时间
原文地址:https://www.cnblogs.com/jiufen/p/5056966.html