定义
观察者模式是一种行为型模式,它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。
又称为发布-订阅模式,监听模式
主要角色
- 抽象Subject:主题角色将所有对观察者对象的引用保存在一个集合中,每个主题可以有任意多个观察者。抽象主题提供了增加和删除观察者对象的接口。
- 抽象观察者(Observer)角色:为所有的具体观察者定义一个接口,在观察的主题发生改变时更新自己。
- 具体主题(ConcreteSubject)角色:存储相关状态到具体观察者对象,当具体主题的内部状态改变时,给所有登记过的观察者发出通知。具体主题角色通常用一个具体子类实现。
- 具体观察者(ConcretedObserver)角色:存储一个具体主题对象,存储相关状态,实现抽象观察者角色所要求的更新接口,以使得其自身状态和主题的状态保持一致。
适用性
- 当一个抽象模型有两个方面,其中一个方面依赖于另一个方面。
- 当对一个对象的改变需要同时改变其它对象,而不知道具体有多少个对象待改变。
- 当一个对象必须通知其它对象,而它又不能假定其它对象是谁。换句话说,你不希望这些对象是紧密耦合的。
一句话理解
将需要被监听的类,统一放到一个集合中,当需要统一操作的时候,遍历循环这个集合,通知各个对象去做操作.
实例
不使用SplObserver
1 |
|
使用SplObserver
1 |
|
参考
[设计模式详解以及PHP实现][http://yansu.org/2014/04/19/design-patterns-of-php.html]