观察者模式
观察者模式(Observer),当一个对象的状态发生改变时,依赖他的对象会全部收到通知,并自动更新。
场景:一个事件发生后,要执行一连串更新操作.传统的编程方式,就是在事件的代码之后直接加入处理逻辑,当更新得逻辑增多之后,代码会变得难以维护.这种方式是耦合的,侵入式的,增加新的逻辑需要改变事件主题的代码
观察者模式实现了低耦合,非侵入式的通知与更新机制
// 主题接口
interface Subject{
//添加观察者
public function register(Observer $observer);
//时间通知
public function notify();
}
// 观察者接口
interface Observer{
public function notify();
}
// 主题
class Action implements Subject{
public $_observers=array();
public function register(Observer $observer){
$this->_observers[]=$observer;
}
/**
* 触发事件
*/
public function trigger(){
foreach ($this->_observers as $observer) {
//通知观察者
$observer->notify();
}
}
}
// 观察者
class Cat implements Observer{
public function notify(){
echo "Cat watches TV<hr/>";
}
}
class Dog implements Observer{
public function notify(){
echo "Dog watches TV<hr/>";
}
}
class People implements Observer{
public function notify(){
echo "People watches TV<hr/>";
}
}
//创建一个事件
$action=new Action();
//为事件增加旁观者
$action->register(new Cat());
$action->register(new People());
$action->register(new Dog());
//执行事件 通知旁观者
$action->trigger();