Lecture 7 - Design and Implementation
Lecture 7 - Design and Implementation
Part 1
Part 2
Pattern Observer
name
Description Separates the display of the state of an object from the object itself and
allows alternative displays to be provided. When the object state
changes, all displays are automatically notified and updated to reflect
the change.
Problem In many situations, you have to provide multiple displays of state
description information, such as a graphical display and a tabular display. Not all of
these may be known when the information is specified. All alternative
presentations should support interaction and, when the state is
changed, all displays must be updated.
This pattern may be used in all situations where more than
one display format for state information is required and where it is not
necessary for the object that maintains the state information to know
about the specific display formats used.
Solution This involves two abstract objects, Subject and Observer, and two concrete
description objects, ConcreteSubject and ConcreteObject, which inherit the attributes of
the related abstract objects. The abstract objects include general operations
that are applicable in all situations. The state to be displayed is maintained in
ConcreteSubject, which inherits operations from Subject allowing it to add and
remove Observers (each observer corresponds to a display) and to issue a
notification when the state has changed.
Consequences The subject only knows the abstract Observer and does not know details of
the concrete class. Therefore there is minimal coupling between these objects.
Because of this lack of knowledge, optimizations that enhance display
performance are impractical. Changes to the subject may cause a set of linked
updates to observers to be generated, some of which may not be necessary.