The button and drivecontrol are stateless - the dispatcher is responsible for maintaining the state in the system. Without the dispatcher, then if two buttons were pushed then they'd both send their inputs to the drive control and the system would crap out (or else the drive control would simply ignore one of the inputs); instead, the dispatcher intercepts the button inputs and queues them appropriately (i.e. changes the system state to reflect the button inputs), then sequentially dispatches them to the drive control.