A large proportion of the code we write has different components (classes) communicating with one another through direct references. However, there are situations when you don’t want objects to be necessarily aware of each other’s presence. Or, perhaps you do want them to be aware of one another, but you still don’t want them to communicate through references, because as soon as you keep and hold a reference to something, you extend that object’s lifetime beyond what might originally be desired (unless it’s a WeakReference, of course).
So the Mediator is a mechanism ...