A software behavioral design pattern which allows for the single-threaded demultiplexing of events. Also known as Dispatcher Pattern or Event-driven programming