Source code for libutilitaspy.patterns.observer

"""
This module implements the base classes of the *observer pattern* [GoF94]_.

.. [GoF94] E. Gamma, R. Helm, R. Johnson and J. Vlissides. Design Patterns: Elements of reusable Object-Oriented Software. 1994 
"""



[docs]class Observer: """ An *observer* (also called *listener*) is any object which can be registered with some :py:class:`Observable` object to be notified whenever the Observable object is updated. """
[docs] def notify(self, *args, **kwargs): """Method executed whenever any Observable where self is registered is updated. It should be overriden by a subclass.""" pass
[docs]class Observable: """ An *observable* object is any object that has a list of registered :py:class:`Observer` objects which are notified whenever the observable object is updated (a relevant change of state occurs). """ def __init__(self): self.observers = []
[docs] def register(self, observer): """ Registers the observer object. :param Observer observer: The object to register. :post: after(self.observers) == before(self.observers) + [observer] """ self.observers.append(observer)
[docs] def deregister(self, observer): """ Unregisters the observer object. :param Observer observer: The object to register. :pre: observer in self.observers :post: after(self.observers) == before(self.observers) - [observer] """ self.observers.remove(observer)
[docs] def update(self, *args, **kwargs): """ Notifies all registered observers. """ for observer in self.observers: observer.notify(*args, **kwargs)