Implementation
In this section, we will implement a data formatter. The ideas described here are based on the ActiveState Python Observer code recipe [j.mp/pythonobs]. 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. We can dynamically add and remove observers on demand. The following class diagram shows an instance of the example using two observers: HexFormatter
and BinaryFormatter
. Note that, because...