Adoro conversar, se tem uma coisa que gosto de fazer é falar e ouvir… e em uma dessas conversas recentes surgiu a discussão sobre como explicar mais rapidamente as diferenças entre os padrões de Observables e PubSub.
Resolvi então traduzir o fio da conversa em um post aqui, não vou entrar em todos os detalhes, mas apenas tentar ser mais lúcido e prático nas definições.
Então vamos lá!
Observer

O padrão Observer é um padrão de design comportamental em que um objeto, chamado de Subject, permite definir uma ou mais inscrições dos chamados Observers, e os notifica automaticamente sobre quaisquer mudanças de estado, geralmente chamando um de seus métodos.
Vamos a um exemplo do mundo real:
Você trabalha como vendedor em uma loja de calçados, porém a loja está sempre cheia e todos os dias anota diversos contatos por itens que estão em falta em um bloquinho. No dia seguinte ao verificar que um dos calçados já encontra-se em estoque e claro, para não perder sua comissão de venda, resolve ligar para todos todos os contatos do dia específico de procura daquele item que mudou de status.

Agora o exemplo como deve ser:

Simples não é? 🙂
Publish Subscriber
É um padrão para troca de menssagens onde quem as envia são chamados de Publishers, porém eles não enviam as mensagens diretamente para quem os recebe, os Subscribers.
Os publishers não tem conhecimento dos subscribers, e vice versa.. mas então como eles se comunicam? Eles expressam interesses(intents) de envios, e interesses em recepções.
Mas se eles não se conhecem, como é feita a comunicação? Há outro componente, o Message Broker, e ele sim é conhecido tanto pelo publisher quanto pelo subscriber. O publish enviará a mensagem ao message broker e ele por sua vez filtrará e transmitirá a mensagem ao(s) subscriber(s) correto(s).

Existem vários message brokers disponíveis, no exemplo ilustrativo a área em cinza seria a sua representação, lembrando que são bem mais complexos que isso, é claro.
Obrigado
O post foi curto e rápido como previsto, vejo vocês em breve.
Leave a Reply