Yes, I've used a mediator before for this type of thing—specifically using guava's EventBus as the mediator.
On my current project I'm using a simplified Observer: the Observer interface has a single signal()
method (no parameters). On every event loop, the signalled components are updated.