W oryginalnej książce, która ukuła terminy Observer i Mediator, Design Designs, Elements of Reusable Object-Oriented Software , napisano, że wzorzec Mediator można wdrożyć za pomocą wzorca obserwatora. Można to jednak również wdrożyć, gdy Koledzy (mniej więcej odpowiadający wzorowi Tematy Observera) mają odniesienie do klasy Mediatora lub interfejsu Mediatora.
Istnieje wiele przypadków, w których chciałbyś użyć wzorca obserwatora, kluczem jest to, że obiekt nie powinien wiedzieć, jakie inne obiekty obserwują jego stan.
Mediator jest nieco bardziej szczegółowy, pozwala uniknąć komunikacji klas, ale zamiast tego za pośrednictwem mediatora. Pomaga to w zasadzie Pojedynczej Odpowiedzialności, umożliwiając odciążenie komunikacji do klasy, która po prostu to obsługuje.
Klasycznym przykładem Mediatora jest GUI, w którym naiwne podejście może prowadzić do kodu zdarzenia zdarzenia kliknięcia przycisku, mówiącego: „jeśli panel Foo jest wyłączony, a panel Bar ma etykietę„ Proszę wpisać datę ”, to nie dzwoni do serwera, w przeciwnym razie śmiało ”, gdzie według wzoru Mediatora można by powiedzieć:„ Jestem tylko guzikiem i nie mam ziemskiego interesu, wiedząc o panelu Foo i etykiecie na panelu Bar, więc po prostu zapytam mojego mediatora, czy dzwoni na serwer jest teraz OK. ”
Lub, jeśli zostanie zaimplementowany przy użyciu wzorca obserwatora, przycisk powie: „Hej, obserwatorzy (w tym mediator), mój stan się zmieni (ktoś mnie kliknął). W moim przykładzie prawdopodobnie ma to mniej sensu, ale czasem tak by było, a różnica między Obserwatorem a Pośrednikiem byłaby bardziej intencyjna niż różnica w samym kodzie.