Patrones de diseño de software: Observador

El patrón Observador (observer) es un patrón de diseño de comportamiento que te permite definir un mecanismo de suscripción para notificar a varios objetos sobre cualquier evento que le suceda al objeto que está observando.

¿Qué problema resuelve el patrón observador?

Un ejemplo de aplicación para este patrón sería el de una aplicación con comercio electrónico.

Puede existir un conflicto entre el interés de un Cliente por un producto nuevo que aún no está disponible en la Tienda, entonces pierde tiempo verificando la disponibilidad del producto, y los recursos que puede desperdiciar una Tienda notificando a los Clientes equivocados, en sus esfuerzos de marketing.  

Por tanto, necesitas un mecanismo que gestione sujetos (objetos con interés), publicadores (objetos que también notifican a otros objetos sobre los cambios en su estado), y suscriptores (objetos que desean realizar un seguimiento de los cambios).

Con el patrón Observador puedes agregar un mecanismo de suscripción a la clase de publicador para que los objetos individuales puedan suscribirse o darse de baja de una secuencia de eventos provenientes de ese publicador.

Después, siempre que el editor tenga un evento importante, revisa a sus suscriptores y llama al método de notificación específico en sus objetos.

¿Cuándo usar el patrón observador?

Podrías utilizar el patrón Observador cuando los cambios en el estado de un objeto requieran cambiar otros objetos, y el conjunto real de objetos se desconozca de antemano o cambie dinámicamente, por ejemplo cuando estés trabajando con clases de la interfaz gráfica de usuario.

También podrías usar este patrón cuando algunos objetos en tu aplicación deban observar a otros por un tiempo limitado o en casos específicos.

Pros y contras del patrón observador

Los siguientes son algunos de los “pros y cons” de este patrón.

Pros

Contras

  • Principio abierto/cerrado. Puedes introducir nuevas clases de suscriptores sin tener que cambiar el código del editor

  • Puedes establecer relaciones entre objetos en tiempo de ejecución

  • Los suscriptores son notificados en orden aleatorio

“Show me the code”

El patrón Observer es bastante complejo, pero muy popular en PHP. De hecho, PHP tiene interfaces integrales que puedes usar para hacer que tus implementaciones del patrón sean compatibles con el resto del código PHP.

Si quieres tener una idea de cómo se ve el código del patrón Observador , puedes ver el ejemplo de la vida real, en PHP, de refactoring.guru. En el ejemplo del mundo real, podrás ver cómo el patrón permite que varios objetos observen eventos que suceden dentro de un repositorio de usuarios de una aplicación. El repositorio emite varios tipos de eventos y permite a los observadores escucharlos todos, así como solo los individuales.

¿Utilizas el patrón Observador en tus proyectos? ¿Qué tal la experiencia? ¡Coméntalo abajo!  

Fuentes: