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'.
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)
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:
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.