RedCloud Help

观察者模式

定义

定义了对象之间的一对多以来,让多个观察者对象同时监听一个主体对象,当主题对象发生变化时,它的所有依赖者(观察者)都会受到通知并更新,属于行为型模式。有时也叫做发布订阅模式。

应用场景

  • 微信朋友圈动态通知

  • GPser生态圈消息通知

  • 邮箱通知

  • 广播通知

  • 桌面程序的事件响应

例子

新闻通知

create/remove
Channel
update(Object) : void
NewsChannel
getNews() : string
setNews(string) : void
update(Object) : void
NewsAgency
String news
List channels
addObserver(Channel) : void
removeObserver(Channel) : void

新闻通知(使用Java.util.Observer实现)

Observer
update(Observable,Object) : void
ONewsChannel
getNews() : String
setNews(string) : void
update(Observable,Object) : void
Observable
addObserver(Observer) : void
clearChanged() : void
countObservers() : int
deleteObserver(Observer) : void
deleteObserver() : void
hasChanged() : boolean
notifyObservers() : void
notifyObservers(Object) : void
setChanged() : void
ONewsAgency
setNews(string) : void

新闻通知(使用java.beans.PropertyChangeEvent | java.beans.PropertyChangeListener实现)

add
«interface»
EventListener
PropertyChangeListener
propertyChange(PropertyChangeEvent) : void
PCLNewsChannel
news String
getNews() : string
propertyChange(PropertyChangeEvent) : void
setNews(string) : void
PCLNewsAgency
news String
support PropertyChangeSupport
addPropertyChangeListener(PropertyChangeListener) : void
removePropertyChangeListener(PropertyChangeListener) : void
setNews(string) : void

优点

  1. 观察者和被观察者之间建立了抽象的耦合。

  2. 观察者模式支持广播通信。

缺点

  1. 观察者之间有过多的细节依赖、提高时间消耗及程序的复杂度。

  2. 使用要得当,要避免循环调用。

13 February 2026