El patrón observer

Hoy me ha tocado hablar en una charla en PHPVigo sobre el patrón Observer.
Por aquí dejo la presentación (Observer a partir de la página 66) y un pequeño resumen.
Qué hace
Permite a un objeto mantener una lista de objetos a los que notifica cuando su estado cambia.
Conceptos que se manejan
- SUBJECT (aka OBSERVABLE) El objeto que notifica su cambio de estado a los que lo observan.
- OBSERVER Lista de objetos que mantiene el objeto observable y que son notificados por él.

Interfaces
La interfaz para el objeto Observable es:
1 | interface Observable { |
y para el objeto observer:
1 | interface Observer { |
El patrón observer en la SPL (Standard PHP Library)
La librería estándar de PHP dispone de una serie de interfaces para implementar este patrón y una clase (SplObjectStorage) que permite al Observable almacenar los Observers a los que tiene que notificar.

SplObjectStorage dispone de los métodos attach y detach para añadir objectos o eliminarlos.
Ejemplo de implementación
ExampleSubject (Observable)
1 | class ExampleSubject implements \SplSubject |
En la línea 7 inicializamos un SplObjectStorage donde poder almacenar los Observers y
en la línea 23 vemos que de forma opcional podemos pasar el propio Observer a los observables como parámetro.
ExampleObserver
1 | class ExampleObserver implements \SplObserver |
Ejemplo de utilización
Podéis ver un ejemplo muy sencillo en Github.