- subject maintains a list of dependent observers
- subject provides an interface (i.e., a set of methods) for attaching and detaching observer objects
- subject sends notifications via an update method on each observer
- observer provides an updating interface used by the subject for notification
Subject Observer
attach(Observer) update(infoObject)
detach(Observer)
notify(infoObject)
- issue: how to tell observers "what changed" in subject?
- push model vs pull model
- push model: subject sends "what changed" at update time (e.g., via
infoObject).- more efficient, but forces subject to assume needs of observers
- pull model: subject sends nothing at update time. observers must determine "what changed" by requesting information from subject.
- less efficient. more work for each observer.
- middle ground: category types. subject provides a separate interface for each category of change.
- e.g., Java's java.awt.Component class provides separate addMouseListener() and addMouseMotionListener() methods