Nel libro originale che coniò i termini osservatore e mediatore, schemi di progettazione, elementi di software orientato agli oggetti riutilizzabili, si afferma 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 al modello Soggetti dell'osservatore) abbiano un riferimento a una classe di mediatore o a un'interfaccia di mediatore.
Ci sono molti casi in cui vorresti usare il modello di osservatore, la loro chiave è che sull'oggetto non dovrebbe sapere quali altri oggetti stanno osservando il suo stato.
Il mediatore è un po 'più specifico, evita che le classi comunichino direttamente ma invece attraverso un mediatore. Ciò aiuta il principio della responsabilità singola consentendo di scaricare la comunicazione in una classe che la gestisce.
Un classico esempio di Mediatore è in una GUI, in cui l'approccio ingenuo potrebbe portare al codice su un evento clic sul pulsante che dice "se il pannello Foo è disabilitato e il pannello Bar ha un'etichetta che dice" Inserisci la data ", quindi non chiamare il server, altrimenti andare avanti ", dove con il modello del mediatore si potrebbe dire" Sono solo un pulsante e non ho affari terrestri a conoscenza del pannello Foo e dell'etichetta sul pannello Bar, quindi chiederò al mio mediatore se si chiama il server va bene adesso ".
Oppure, se è implementato usando il modello di osservatore, il pulsante direbbe "Ehi, osservatori (che includerebbe il mediatore), il mio stato è cambiato (qualcuno mi ha cliccato). Fai qualcosa al riguardo se ti interessa". Nel mio esempio questo probabilmente ha meno senso, ma a volte lo sarebbe, e la differenza tra Observer e Mediatore sarebbe più un intento che una differenza nel codice stesso.