É un Design pattern che definisce una dipendenza del tipo uno a molti tra oggetti di modo che l’oggetto a cui gli altri si sottoscrivono cambia di stato, gli altri vengono notificati.

É un pattern molto usato e si puó spiegare in modo semplice usando una analogia alle notifiche push dei nostri cellulari.

una app che vuole notificare costantemente gli updates a tutti i suoi utenti

gli utenti si iscrivono alle notifiche e finchè restano sottoscritti ricevono notifiche se c’è qualcosa di nuovo

la sottoscrizione si puo’ annullare in qualsiasi momento

se l’app non pubblica piú updates nessun utente ovviamente li riceverá

Le fasi sono:

1) il Subscriber richiede la sottoscrizione al publisher

Observer Pattern 1

2) Il publisher notifica i subscribers

Observer Pattern 2

3) i subscribers possono essere oggetti differenti e non necessariamente lo stesso oggetto

Observer Pattern 3

Vediamo adesso il diagramma UML delle classi Subject e Observer e della loro implementazioni:

Observer Pattern 4

In questo diagramma si vede cha abbiamo due interfaccie, quella de Subject e quella dell’osserver che sono legati da una relazione 1 a molti, a un Subject corrispondono molti observer.

Per implementar questa interfaccia abbiamo bisogno di creare un ConcreteSubject che usa la interfaccia del Subject e deve implementare i metodi register, remove e notify Observer.

Oltre questi metodi solitamente implementiamo altri due metodi per ottenere e modificare lo stato che deve essere poi inviato agli observers dipendenti.

Nel Observer, l’unico metodo che dobbiamo implementare è quello del update() che sará il Subject a chiamare passandogli le nueve informazioni rispetto al suo stato.