Nel libro originale che ha coniato i termini Observer and Mediator, Modelli di design, elementi del software orientato agli oggetti riutilizzabile dice che il modello di Mediatore può essere implementato usando il modello di osservatore. Tuttavia, può anche essere implementato facendo in modo che i Colleghi (approssimativamente equivalenti ai soggetti del modello Observer) abbiano un riferimento alla classe Mediator o all'interfaccia Mediator.
Ci sono molti casi in cui si vorrebbe usare il pattern dell'osservatore, la chiave è che sull'oggetto non si dovrebbe sapere quali altri oggetti stanno osservando il suo stato.
Il mediatore è un po 'più specifico, evita che le classi comunichino direttamente ma tramite un mediatore. Questo aiuta il principio di Responsabilità Unica, consentendo di scaricare la comunicazione in una classe che lo gestisce.
Un classico esempio di Mediator è in una GUI, dove l'approccio ingenuo potrebbe portare al codice in un evento click del pulsante che dice "se il pannello Foo è disabilitato e il pannello Bar ha un'etichetta che dice" Si prega di inserire la data ", quindi non chiamare il server, altrimenti vai avanti ", dove con il modello di Mediator si potrebbe dire" Sono solo un pulsante e non ho conoscenze sul mondo del pannello Foo e dell'etichetta sul pannello Bar, quindi chiederò al mio mediatore se chiamare il server è OK adesso. "
Oppure, se è implementato usando il pattern di osservatore, il pulsante direbbe "Ehi, osservatori (che includerebbe il mediatore), il mio stato è cambiato (qualcuno mi ha fatto clic). Nel mio esempio questo probabilmente ha meno senso, ma a volte lo farebbe, e la differenza tra Observer e Mediator sarebbe più una questione di intenti che una differenza nel codice stesso.