El patrón de diseño de Observer es como un podcast

Si escucha podcasts, ya está familiarizado con el patrón Observer. De hecho, eres un "observador".

Aquí está la definición del patrón Observador:

El patrón de observador define una dependencia de uno a muchos entre los objetos, de modo que cuando un objeto cambia de estado, todos sus dependientes son notificados y actualizados automáticamente.

Veamos la definición en relación con los podcasts.

Encontré un podcast interesante llamado desarrollador de té.

Después de hacer clic en el botón SUSCRIBIRSE, ahora estoy en su lista de suscriptores.

Cuando el desarrollador de té lanza un nuevo episodio, la aplicación me notificará a mí y a otros suscriptores. Descarga el nuevo episodio para nosotros.

¡Esa es exactamente la definición del patrón Observador!

El patrón de observador define una dependencia de uno a muchos entre los objetos, de modo que cuando un objeto cambia de estado, todos sus dependientes son notificados y actualizados automáticamente.

Existe una relación de uno a muchos entre el desarrollador de podcast de té y los suscriptores.

Cuando el desarrollador de té cambia de estado, como el lanzamiento de un nuevo episodio, todos los suscriptores del desarrollador de té reciben una notificación y se actualizan.

Implementémoslo en Ruby.

Comience con una versión simple.

La clase Podcast contiene una lista de episodios y tiene un método para agregar_episodios a la lista.

Luego podemos crear el podcast developer_tea y agregar el episodio # 1 de esta manera:

Quiero recibir una notificación cada vez que se publique un nuevo episodio.

Podemos actualizarme después de agregar un nuevo episodio a la lista:

Y cada vez que recibo una actualización de developer_tea, puedo seguir adelante y descargar el último episodio.

Me gusta tanto escuchar developer_tea que se lo recomiendo a mi amiga, Amber. Ahora, Amber quiere suscribirse también.

Necesitamos asegurarnos de que Amber también reciba una notificación cada vez que se lance un nuevo episodio:

Hmmm, este código hace lo que queremos.

Pero hay un problema.

Cada vez que queremos agregar un suscriptor, tenemos que redefinir la clase.

¿Hay alguna manera de actualizar la lista de suscriptores sin tener que redefinir la clase?

¡Podemos mantener una lista de suscriptores!

La nueva clase Podcast mantiene una lista de suscriptores con la ayuda de dos nuevos métodos: uno para agregar suscriptores y otro para eliminar suscriptores. Cuando se lanza un episodio, actualizamos a cada suscriptor.

Desafortunadamente, Amber no disfruta el podcast tanto como yo y decide darse de baja. Utilizamos el método remove_subscriber para eliminarla de la lista de suscriptores.

Yay! ¡Acabas de aprender el patrón Observador!

Principio de diseño detrás del patrón Observador.

El patrón del observador utiliza el principio de diseño de acoplamiento flojo:

Esfuércese por diseños sueltos entre objetos que interactúen.

La clase Podcast no sabe mucho sobre sus suscriptores. Solo sabe que cada suscriptor tiene un método de actualización.

Este acoplamiento flexible minimiza la dependencia entre Podcast y sus suscriptores. También maximiza la flexibilidad. Siempre que tenga un método de actualización, un suscriptor puede ser cualquier cosa: un ser humano, un grupo de personas, un animal o incluso un automóvil.

Comida para llevar:

  1. El patrón de observador define una dependencia de uno a muchos entre los objetos, de modo que cuando un objeto cambia de estado, todos sus dependientes son notificados y actualizados automáticamente.
  2. Principio de diseño de acoplamiento suelto: luchar por diseños sueltos entre objetos que interactúan.

Gracias por leer. ¿Hay otros ejemplos de la vida real del patrón Observador que se te ocurran?

Publico semanalmente en sihui.io.

Suscríbase para no perderse el próximo artículo de la serie.

La próxima vez hablaremos de ...