Implementation of the observer pattern, with multiple representations.

What is this? Why does this matter?

An observer is a simple design pattern, where a single entity (generally an object or module), is made to control any observations and allows subscription to itself and other receivers. By abstracting the logic and control to an "observer" object, the actual representation is irrelevant and can therefore be used in any way imaginable.

All updates are routed through the observer, making things easier to manage. For example, in this scenario, adding new visualizations is as simple as adding new viz functions and then adding them to the observers callback. All data is routed through it, and callbacks are fired on change events.