Mediator

Mediator è un design pattern comportamentale. Va utilizzato per centralizzare il controllo e delle comunicazioni complesse fra oggetti correlati.

Problema

Alice ha una casa “intelligente” (sviluppata in Java), grazie a un’azienda di domotica. Tutti i loro dispositivi sono progettati per semplificare la vita. Ad esempio, quando Alice preme il pulsante della sveglia Alarm, quest’ultima comunica alla macchina del caffè CoffeePot di iniziare a prepararsi. Sebbene la vita di Alice sia migliorata, lei e altri clienti chiedono sempre nuove funzionalità: niente caffè durante i weekend, spegnere l’irrigatore 15 minuti prima di una doccia, impostare la sveglia prima nei giorni di raccolta dei rifiuti…

Per gli sviluppatori dell’azienda diventa difficile tenere traccia di quali regole debbano stare in quali oggetti, e come i vari oggetti debbano comunicare tra di loro.

Soluzione

Aggiungendo un oggetto Mediator al sistema, tutti gli oggetti che rappresentano i dispositivi (Alarm, Calendar, ecc.) possono essere semplificati di molto, in quanto devono solo:
• dire a Mediator quando il loro stato cambia;
• rispondere alle richieste di Mediator.

Prima dell’aggiunta di Mediator, tutti gli oggetti dei dispositivi avevano bisogno di conoscersi tra di loro… cioè erano strettamente accoppiati! Grazie all’oggetto Mediator, tutti gli oggetti dei dispositivi sono completamente disaccoppiati l’uno dall’altro.
Mediator, inoltre, contiene tutta la logica di controllo dell’intero sistema. Quando un dispositivo esistente ha bisogno di una nuova regola, oppure si aggiunge un nuovo dispositivo al sistema, la logica necessaria sarà aggiunta solo al codice di Mediator.

Conseguenze

Vantaggi:
• incrementa la ri-usabilità degli oggetti supportati da Mediator, disaccoppiandoli dal sistema;
• semplifica la manutenzione del sistema, centralizzando la logica di controllo;
• semplifica e riduce la varietà dei messaggi scambiati tra gli oggetti nel sistema.

Utilizzi:
• è usato comunemente per coordinare i componenti correlati della GUI.

Svantaggi:
• senza una corretta progettazione, l’oggetto Mediator può diventare eccessivamente complesso.

Riferimenti

• Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides – Design Patterns. Elementi per il riuso di software a oggetti — © Pearson Education Inc. / © Pearson Paravia Bruno Mondadori, 1995-2008, pp. 275-284