PHP - 设计模式之 观察者模式

观察者模式

概述部分

1、观察者模式(observer),当一个对象状态发生改变时,依赖它的对象全部都会收到通知,并自动更新

2、场景:一个事件发生之后,要执行一连串的更新操作。传统的编程方式,就是直接在事件代码的后面,加入处理逻辑。但当更新的逻辑增多之后,代码会变得难以维护。这种方式是耦合的,侵入式的,增加新的逻辑,就需要修改主体代码

3、观察者模式实现了低耦合,非侵入式的通知和更新机制

 

代码部分

1、事件发生者

PHP - 设计模式之 观察者模式

PHP - 设计模式之 观察者模式

PHP - 设计模式之 观察者模式

PHP - 设计模式之 观察者模式

2、事件观察者

PHP - 设计模式之 观察者模式

3、事件主体

PHP - 设计模式之 观察者模式

这里,Event类调用事件发生者类,然后,调用父类(事件发生者类)通知所有观察者的方法notify,一旦有任何事件发生,便会以便利监听列表的方式,通知到每一个观察者。

具体操作,直接实例对象,调用trigger方法。

PHP - 设计模式之 观察者模式

如果有事件,调用事件观察者接口,实现接口的update方法,实现相应的更新操作动作

PHP - 设计模式之 观察者模式

 

PHP - 设计模式之 观察者模式

 

PHP - 设计模式之 观察者模式

调用的时候,将事件加入到监听列表

PHP - 设计模式之 观察者模式

这样

PHP - 设计模式之 观察者模式

调用trigger方法的时候

PHP - 设计模式之 观察者模式

会通过调用父类(抽象类)的notify方法

PHP - 设计模式之 观察者模式

遍历监听列表里的所有的事件,并执行update更新操作,而这里的update操作来自观察者类

PHP - 设计模式之 观察者模式

而所有的事件,都实现了这个接口

PHP - 设计模式之 观察者模式

这样,浏览器最后的输出就是:

PHP - 设计模式之 观察者模式

 

总结

这就是观察者模式的好处,观察者(接口),负责观察一旦有事件发生,就执行相应的更新操作;发生者(抽象类),负责将所有的事件存入监听列表,并通知观察者,执行所有的相应的更新操作。实现了低耦合,避免了主体代码的更改,方便了扩展,代码质量也更加高效!