The problem Mediator solves
A flight booking form. Six controls, and every one of them has an opinion about the others.
Tick return trip and the return-date field must enable itself. Change the departure country and the currency selector must switch, the price must recalculate, and any promo code must be revalidated because some codes are region-locked. Pick business class and the promo field must clear and disable itself. Choose a return date before the departure date and the submit button must go grey.
Written the obvious way, the return-trip checkbox holds a reference to the date field. The country dropdown holds references to the currency selector, the price label and the promo field. The promo field needs to ask the class selector what it is. Six controls, and the wiring between them is approaching thirty references — every one of them a reason for one widget to change when another does.
Then design asks to reuse the promo field on the checkout page. You can't: it only compiles alongside a class selector and a country dropdown it has never needed to know about.
