jiufen
<?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我,我该做点什么事情了^_^\n\';
    }
}

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

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

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

 

分类:

技术点:

相关文章:

  • 2021-09-11
  • 2022-12-23
  • 2021-08-05
  • 2021-12-28
  • 2021-11-12
  • 2021-06-09
  • 2021-05-18
  • 2021-11-24
猜你喜欢
  • 2022-12-23
  • 2021-10-04
  • 2022-12-23
  • 2022-01-04
  • 2021-09-27
  • 2021-05-18
  • 2022-12-23
相关资源
相似解决方案