Use the Observer pattern when…

  • There are aspects to an abstraction that can vary independently.
  • Changes in one object need to be propagated to a selection of other objects, not all of them.
  • The object sending the changes does not need to know about the receivers.