设计模式笔记_二_观察者模式

简介

观察者模式 定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。

  • 主题 + 观察者 = 观察者模式

  • 观察者模式定义了一系列对象之间的一对多关系

  • 当一个对象改变状态,其他依赖者都会收到通知

图示

类图

观察者模式耦合度

两个对象之间松耦合指:它们可以交互,但不太清楚彼此的细节。

观察者模式提供了一种对象设计,让主题和观察者之间松耦合。这体现在:

  • 主题只知道观察者实现了某个接口(也就是Observer接口)。主题不需要知道观察者的具体类的其它细节

  • 任何时候都可以 添加/删除 观察者。因为主题唯一依赖的东西是一个实现Observeer接口的对象列表

  • 有新类型的观察者出现时,主题的代码不需要修改

  • 可以独立地复用主题或观察者

  • 改变主题或观察者其中一方,不会影响到另一方

设计原则:为了交互对象之间的松耦合设计而努力。

松耦合的设计之所以能让我们建立有弹性的OO系统,能够应对变化,是因为对象之间的相互依赖降到了最低。

总结

可用的工具

基础

  • 抽象

原则

  • 封装变化

  • 多用组合,少用继承

  • 针对接口编程,不针对实现编程

  • 为交互对象之间的松耦合设计而努力

模式

  • 观察者模式

要点

  • 观察者模式定义了对象之间一对多的关系

  • 主题(也就是可观察者)用一个共同的接口来更新观察者

  • 观察者和可观察者之间用松耦合方式结合,可观察者不知道观察者的细节,只知道观察者实现了观察者接口

  • 使用此模式时,可从被观察者处推(push)或拉(pull)数据(一般倾向于推送更新)

  • 有多个观察者时,不可以以来特定的通知次序

  • Java有多种观察者模式的实现,包括了通用的java.util.Observable

案例

设计气象局

类图

实现接口

实现气象站

实现布告板

启动气象站

输出

最后更新于

这有帮助吗?