Mediator: Defines simplified communication between classes. Define
an object that encapsulates how a set of objects interact. Mediator
promotes loose coupling by keeping objects from referring to each other
explicitly, and it lets you vary their interaction independently.
There is similarity between Mediator and Observer. For Mediator: all
colleagues use mediator.colleaguesChange(this) to notify one Mediator.
For observer: one subject use observer.update(this) to notify all
observers.