Estructura del patrón Observer:

Comportamiento del patrón Observer:

Ejemplos de bibliotecas de PubSub/MQ:
Protocolos de MQ:
¿Cómo crear sistemas que respondan a combinaciones de eventos?
Hay que añadir la dimensión del tiempo al procesamiento de los eventos
Los eventos deben disparar reacciones en el código, pero no es fácil conectar las acciones con los eventos. Para facilitarlo, se usan streams...
Los datos fluyen por pipelines y se consumen siguiendo modelos push o pull

Un stream trata a los eventos como colleciones de datos, de forma que pueden ser tratados como cualquier otra colección: manipularlos, combinarlos, filtrarlos, etc.
Además, los streams pueden ser asíncronos.
Es un paradigma, parte de la programación asíncrona: la disponibilidad de información nueva conduce la lógica del programa, en vez de dejar que el control de flujo sea dirigido por un hilo de ejecución.
Los Observables se pueden:
Create, Defer, From, Interval, Just, Range, Repeat, Start, TimerBuffer, FlatMap, GroupBy, Map, Scan, WindowDebounce, Distinct, ElementAt, Filter, IgnoreElements, Last, Sample, Skip, SkipLast, Take, TakeLastAnd/Then/When, CombineLatest, Join, Merge, StartWith, Switch, Zip¿Qué añade un Observable al patrón Observer?
Añade a un Observer asíncrono/push la semántica de un Iterable síncrono/pull:
onCompleted(): para que el publicador avise al suscriptor que no hay más datos disponibles en el stream (los Iterables simplemente acaban su iteración)onError(): para que el productor avise al suscriptor que ha ocurrido un error (en su lugar, los Iterables elevan excepciones)Lecturas recomendadas
--- ### Ejemplo: Ajax + jQuery callbacks - [Ajax](http://learn.jquery.com/ajax/) - [jQuery](http://devdocs.io/jquery/) - [jQuery Callbacks object](http://devdocs.io/jquery-callbacks-object/)