Enable components to react to the occurrence of particular events in other components without knowledge of one another, while allowing dynamic participation of components and dynamic introduction of new kinds of events.
See also: MultiCaster, ObserverPattern, MediatorPattern