Mediator

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.

Applicability

Complex interaction exists, and you don't what to bury the interaction in the objects

Reuse is difficult due to communciation paths

Distributed behavior should be customizable without a lot of subclassing