The Observer Pattern

Learn about the Observer pattern with a practical example.

We'll cover the following

Overview

The Observer pattern is useful for state monitoring and event handling situations. This pattern allows a given object to be monitored by an unknown and dynamic group of observer objects. The core object being observed needs to implement an interface that makes it observable.

Whenever a value on the core object changes, it lets all the observer objects know that a change has occurred, by calling a method announcing there’s been a change of state. This is used widely in GUIs to make sure that any state change in the underlying model is reflected in the views of the model. It’s common to have detail and summary views; a change to the details must also update the widgets that display the details and update any summaries that are displayed. Sometimes a large change in mode may lead to a number of items being changed. For instance, clicking a lock icon may alter a number of displayed items to reflect their status as locked. This can be implemented as a number of observers attached to the observable display widget.

In Python, the observer can be notified via the __call__() method, making each observer behave like a function or other callable object. Each observer may be responsible for different tasks whenever the core object changes; the core object doesn’t know or care what those tasks are, and the observers don’t typically know or care what other observers are doing.

This allows tremendous flexibility by decoupling the response to a state change from the change itself.

Here is a depiction of the Observer design pattern in UML:

Get hands-on with 1400+ tech skills courses.