paint-brush
Patrón de observador frente a Pub-Subpor@me_shaon
124,441 lecturas
124,441 lecturas

Patrón de observador frente a Pub-Sub

por Ahmed shamim hassan2017/10/28
Read on Terminal Reader
Read this story w/o Javascript

Demasiado Largo; Para Leer

Una vez me preguntaron en una entrevista, <em>&quot;¿cuál es la diferencia entre el patrón Observer y el patrón Pub-Sub?&quot;</em> Inmediatamente pensé que Pub-Sub significa <strong>&#39;Editor-Suscriptor&#39;</strong> y luego recordé vívidamente del libro &quot;Head first Design Pattern&quot;:

Company Mentioned

Mention Thumbnail
featured image - Patrón de observador frente a Pub-Sub
Ahmed shamim hassan HackerNoon profile picture

Foto de Ben White en Unsplash

Una vez me preguntaron en una entrevista, "¿cuál es la diferencia entre el patrón Observer y el patrón Pub-Sub?" Inmediatamente pensé que Pub-Sub significa 'Editor-Suscriptor' y luego recordé vívidamente del libro "Head first Design Pattern":

Editores + Suscriptores = Patrón observador

“Lo tengo, lo tengo. No me puede engañar Sr.” - Pensé.

Estoy agregando este GIF irrelevante, como todos lo hacen

Respondí con una sonrisa ganadora: “Son iguales” .

Pero el entrevistador me devolvió la sonrisa como si me entendiera y dijo: "No, no lo son". Y me quede como-

Sí, lo he vuelto a hacer.


¿Así que ... qué me perdí? ¿Cómo salió mal? Después de regresar a casa, decidí buscar la respuesta en Google. Esta publicación trata sobre el extracto que aprendí de esa consulta.

Antes de profundizar en la diferencia, primero hablemos un poco sobre el patrón 'Observer' y 'Pub-Sub'.

Patrón de diseño del observador:

Creo que mucha gente estará de acuerdo conmigo en que el patrón de diseño 'Observador' es uno de los patrones de diseño más fáciles de todos. Quiero decir, a diferencia de la mayoría de los otros patrones de diseño, al menos puedes 'Sentir' cuál es el concepto principal del patrón de diseño Observer en la primera lectura.

El patrón de observador es un patrón de diseño de software en el que un objeto, llamado sujeto , mantiene una lista de sus dependientes, llamados observadores , y les notifica automáticamente cualquier cambio de estado, generalmente llamando a uno de sus métodos.

Mira, incluso la definición de Wikipedia no es tan difícil, ¿verdad? Si todavía está luchando, expliquemos en términos sencillos.

Supongamos que está buscando trabajo como ingeniero de software y está muy interesado en una empresa llamada 'Banana Inc.'. Entonces, se comunicó con su gerente de contratación y le dio su número de contacto. Te aseguró que si hay alguna vacante te avisarán. Y también hay otros candidatos interesados, como tú. Informarán a todos los candidatos sobre la vacante y tal vez si responde, realizarán una entrevista. Entonces, ¿cómo se relaciona este escenario con el patrón de diseño 'Observer'? Aquí, la empresa 'Banana Inc.' es el Sujeto que mantiene una lista de todos los Observadores (candidatos como usted) y notificará a los observadores para un determinado evento 'vacante'. ¿No es fácil, amigo?

Patrón de diseño del observador (A vista de pájaro :P)

Por lo tanto, si alguna vez necesita implementar este escenario en algún software o aplicación, puede seguir este proceso y puede decir que ha implementado el 'Patrón de diseño del observador'. (No estoy inflando mi artículo al mostrar ningún ejemplo de código, porque hay toneladas de ejemplos disponibles en Internet)

Patrón de diseño Pub-Sub (Editor-Suscriptor):

Sí, el Sujeto en el Patrón del Observador es como un Publicador y el Observador puede estar totalmente relacionado con un Suscriptor y Sí, el Sujeto notifica a los Observadores como un Publicador generalmente notifica a sus suscriptores. Es por eso que la mayoría de los libros o artículos de Design Pattern usan la noción de 'Editor-Suscriptor' para explicar Observer Design Pattern. Pero hay otro Patrón popular llamado 'Editor-Suscriptor' y es conceptualmente muy similar al patrón del Observador. La principal diferencia entre el patrón (real) 'Editor-Suscriptor' y el patrón 'Observador' es esta:

¡Ups! lo siento, ese no. Éste:

En el patrón 'Editor-Suscriptor', los remitentes de mensajes, llamados editores , no programan los mensajes para que se envíen directamente a receptores específicos, llamados suscriptores.

Esto significa que el editor y el suscriptor no conocen la existencia del otro. Hay un tercer componente, llamado intermediario o intermediario de mensajes o bus de eventos , que es conocido tanto por el editor como por el suscriptor, que filtra todos los mensajes entrantes y los distribuye en consecuencia. En otras palabras, pub-sub es un patrón utilizado para comunicar mensajes entre diferentes componentes del sistema sin que estos componentes sepan nada sobre la identidad de los demás. ¿Cómo filtra el corredor todos los mensajes? En realidad, existen varios procesos para el filtrado de mensajes. Los métodos más populares son: basado en temas y basado en contenido . Bueno, no voy a ir más lejos en ese camino, si te interesa, Wikipedia lo explicó bien .

Patrón Pub-Sub (crédito de la imagen: blog de MSDN )

Entonces, en pocas palabras, la principal diferencia entre estos dos patrones se puede mostrar así:

Fuente de la imagen: club de desarrolladores

¿Tiene sentido?

Hagamos una lista de las diferencias como un resumen rápido:

  • En el patrón del Observador , los observadores O** son conscientes del Sujeto, también el Sujeto mantiene un registro de los Observadores **. Mientras que, en Publisher/Subscriber , los editores y los suscriptores no necesitan conocerse entre sí . Simplemente se comunican con la ayuda de colas de mensajes o intermediarios.
  • En el patrón de publicador/suscriptor , los componentes están débilmente acoplados a diferencia del patrón de observador .
  • El patrón del observador se implementa principalmente de forma síncrona , es decir, el Sujeto llama al método apropiado de todos sus observadores cuando ocurre algún evento. El patrón Publicador/Suscriptor se implementa principalmente de forma asíncrona (utilizando la cola de mensajes).
  • El patrón de observador debe implementarse en un único espacio de direcciones de aplicación. Por otro lado, el patrón de publicador/suscriptor es más un patrón de aplicación cruzada.

A pesar de las diferencias entre estos patrones, algunos podrían decir que el patrón Publisher-Subscriber es una variación del patrón Observer debido a la similitud conceptual entre ellos. Y no se equivocará en absoluto. No es necesario tomar las diferencias religiosamente. Son parecidos, ¿no?

Bueno, eso es todo por ahora. Espero que entiendas la idea. Gracias por leer el articulo. Por favor, hágamelo saber si hay algún error o alguna modificación necesaria. Gracias por adelantado.