The interface xxxListener defines functions to react to the xxxEvent family. This is the simplest application of the model. The time it takes to notify a listener is therefore unbounded. As shown in the code, event sources must deal with the issue of registration of listeners and distribution of events when they work in push mode. Java provides classes to support this aspect of the problem.
Adapters allow the decoupling of sources and targets.
The adapter maintains a map to make events of different types correspond to each other. When using a synchronous event-model, a queuing adapter is important to decouple the posting of an event with the execution of the callback on the targets. The queuing adapter just records the event and the source can keep working. The targets can handle the event when they have time. The following Swing example illustrates a good usage of event adapters and the technique of using inner classes as event adapters.