Design Pattern For PHP

设计模式类型

行为型设计模式

设计模式名称

观察者模式

模式定义

观察者模式(Observer Pattern)属于行为型模式之一,指当一个对象的状态发生变化时,能够自动地通知其它关联对象,并自动刷新对象状态。
观察者模式提供给关联对象一种同步通信的手段,使某个对象与依赖它的其他对象之间保持状态同步。

UML

1、抽象的被观察者角色
管理了所有观察者集合,负责增加或删除某观察者等操作,并且负责在状态发生变化时,通知相应的观察者。(一般使用抽象类或接口实现)

2、具体的被观察者
实现了观察者接口,在状态发生变化时,更新自己状态并负责通知观察者

3、抽象的观察者角色
定义了统一的接口,用于通知观察者状态更新

4、具体的观察者
实现了接口中更新状态方法
设计模式-行为型设计模式-4.观察者模式(php)

应用场景

1、设计中有2个维度的变化,并且其中一个维度的变化依赖与另一维度的状态更新,这是可以使用观察者将其依赖解耦
2、一个对象状态发生变化将影响多个其他对象的状态也发生变化,但不关注具体有多少个对象发生变化。可以降低这种关联变化的耦合度。
3、一个对象变化必须通知其他对象,但不必具体知道这个对象是谁

优缺点

优点

1、被观察者与观察者解耦
2、实现一种触发机制

缺点

1、如果观察者过多,通知将耗费较大的资源和时间。
2、如果观察者之间有循环依赖的化,将导致循环调用和程序奔溃,使用时需谨慎
3、观察者无法知道观察目标状态发生的原因,只能接收到状态发生变化的通知

git地址

https://github.com/wonlon/Design-patterns

相关文章: