1. 特点
(1)被观察者的状态做出改变时,通知所有的观察者。
(2)被观察者与观察者之间是“抽象耦合”。
2. 缺点(1)如果观察者过多,通知到每一个观察者可能花费时间较多。(2)如果(1)的情况确实,可以考虑使用异步通知,但需要保证自恰性。
(3)如果被观察者之间有循环依赖的话,可能会发生死循环。
3. 代码架构(1)抽象被观察者。包含所有观察者的聚集以及相关操作。
(2)具体被观察者。当状态发生改变时,通知所有观察者。这里要使用“保护性拷贝”,防止调用者修改聚集。
(3)抽象观察者。为所有具体观察者定义一个接口。
(4)具体观察者。实现update()方法逻辑。
4. Java中对观察者模式的支持与应用
(1)被观察者:Obervable抽象类。观察者:Observer接口。默认的通知顺序是按照登记次序的相反次序,但Obervable的子类可以修改这一次序。
(2)AWT库中的事件处理。
(3)Swing的定时器。
5. 典型应用场景(1)网店有新品推出、打折等活动时,自动通知会员。
参考文献:
1. 《设计模式》 板桥里人
2. 《Java与模式》 阎宏
没有评论:
发表评论