观察者模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态发生变化时会通知所有观察者的对象,使它们能够自动更新自己。
//主题类
abstract class ObjectEvent
{
private $_observers = array();
public function register($sub){
$this->_observers[] = $sub;
}
public function notify(){
if(!empty($this->_observers)){
foreach ($this->_observers as $observer){
$observer->update();
}
}
}
}
class Event extends ObjectEvent
{
public function trigger(){
$this->notify();
}
}
#观察者要实现的接口
interface Observerable
{
public function update();
}
class Subscriber implements Observerable
{
public function update()
{
echo '输出结果<br>';
}
}
$event = new Event();
$event->register(new Subscriber());
$event->notify();
观察者模式的关键对象是主题和观察者,一个主题可以有任意数目的依赖它的观察者,一旦主题的状态发生了改变,所有的观察者都可以得到通知。主题发出通知时并不需要知道谁是它的观察者。也就是说,具体观察者是谁,它根本不需要知道。而任何
一个具体观察者不知道也不需要知道其他观察者的存在。
什么时候使用观察者模式呢?当一个对象的改变需要同时改变其他对象的时候,而且它不知道具体有多少对象有待改变时,应该考虑使用观察者模式