A source is an object that produces an event. This happens when the internal state of that object changes in some way. A listener is an object that is notified when an event happens. It has two main requirements. First, it must have been registered with a source to receive notifications about particular event. Second, it must implement essential methods to receive and process these notifications.