Observer Design Pattern

Attempts to remove a hard coupling between software components. Instead of calling a function directly, which creates a hard coupling between the calling function and the callee, the pattern calls for a mediator to dispatch updates between components. Using the mediator, the calling function and the callee can avoid knowing anything about each other.