Implementation
The ideas described here are based on the ActiveState Python Observer code recipe (https://code.activestate.com/). There is a default formatter that shows a value in decimal format. However, we can add/register more formatters. In this example, we will add a hex formatter and a binary formatter. Every time the value of the default formatter is updated, the registered formatters will be notified and take action. In this case, the action is to show the new value in the relevant format.
The observer pattern is one of the patterns where inheritance makes sense. We can have a base Publisher
class that contains the common functionality of adding, removing, and notifying observers. Our DefaultFormatter
class derives from Publisher
and adds the formatter-specific functionality. We can also dynamically add and remove observers on demand.
We will begin with the Publisher
class. The observers are kept in the observer's list. The add()
method registers a new observer...