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