PHP – Design Pattern Observer

30 Ago

Out Of Date Warning

Questo post è stato pubblicato più di 2 anni fa (il 30 agosto 2012). Le idee vanno avanti velocemente, le prospettive cambiano quindi i contenuti potrebbero non essere aggiornati. Ti prego di tenere in considerazione questo, e di verificare le informazioni tecniche presenti nell'articolo prima di farne affidamento per i tuoi scopi.

Il pattern observer (conosciuto anche come Publish-Subscribe Pattern) viene utilizzato per notificare ad uno o più oggetti il cambiamento di stato di un’altro oggetto, affinchè questi si aggiornino.

Il pattern, che si compone da un oggetto (Subject) e dai suoi osservatori (Observers), è un pattern comportamentale che definisce una relazione uno-a-molti tra gli oggetti in modo tale che, quando un oggetto cambia il suo stato, tutti gli oggetti dipendenti vengono notificati e aggiornati automaticamente.
Gli Observers saranno avvisati (notificati) ogniqualvolta lo stato del Subject cambia e potranno agire di conseguenza. Il Subject può avere qualsiasi numero di osservatori, ed un numero qualsiasi di Observers potranno “abbonarsi” al Subject in modo da riceverne le notifiche.
Da PHP 5.1, sono disponibili due interfacce (SplSubject, e SplObserver) all’interno della Standard PHP Library (SPL) che possono essere implementate per utilizzare il pattern Observer nelle nostre applicazioni.

Implementazione

Per implementare l’interfaccia SPLSubject dobbiamo implemetare tre metodi:

  1. attach() – Aggiunge un observer all’oggetto, memorizzandone un’istanza all’interno.
  2. detach() – Rimuove un observer esistente dall’oggetto.
  3. notify() – Notifica un cambiamento di stato a tutti gli observers.

L’interfaccia SplObserver è molto più semplice da implementare, difatti abbiamo un solo metodo, chiamato update(), che prende il chiamante SplSubject come unico parametro.

Esempio

Riassumendo

Il pattern Observer è un modello di progettazione particolarmente indicato quando il cambiamento di un oggetto richiede di cambiarne altri, senza sapere a priori quanti oggetti devono essere modificati, oppure quando un oggetto ha bisogno di segnalare ad altri senza sapere chi sono o quanti ce ne sono.
Questo modello consente di raggiungere un più elevato livello di coerenza tra oggetti correlati e dipendenti senza sacrificare la riutilizzabilità del codice.

Lascia un commento