A system bus is simply a loop dispatching messages to appropriate classes, where any number of said classes can send a message to the loop.

Such a system is a "bus" because it can handle any kind of message and data. Said message is just routed to the classes that are interested in that message.

Disadvantages

Impromptu logic may be encoded in the specific configuration of the bus, and instead of fixing this, programmers may opt to do the least work and just build on it.

Advantages

Extreme Decoupling: With a bus you essentially only couple each sender/receiver to the specific message types they send and the bus itself. Two interacting components never need to know about each other.

High Cohesion: Summarizing an action into an event allows any cross-cutting concerns to connect to said event and thus keep the emitter of the event highly cohesive.


Providing services to components registered with the bus may be done via a ServiceLocator.