<?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();//呼叫系统通知各个观察者,这个动作可以由外界的某件事情来触发,比如到了推送报纸的时间