Implementation
In this section, we will implement a data formatter. 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 the decimal format. However, we can add/register more formatters. In this example, we will add a hex and binary formatter. Every time the value of the default formatter is updated, the registered formatters are notified and take action. In this case, the action is to show the new value in the relevant format.
Observer is actually 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. And, we can dynamically add and remove observers on demand.
We begin with the Publisher
class. The observers are kept in the observers list. The add()
method registers a...