Обычно события обрабатываются путем регистрации функции обратного вызова в классе, который вызовет событие. Когда событие происходит, этот класс вызывает функцию обратного вызова.
Вы найдете много примеров из свинга. Вот пример без свинга из приложения чата, который я сделал некоторое время назад
Это была библиотека, которая позволяла разработчику встраивать возможности чата в свои приложения. Класс ChatClient имеет член типа IMessageListener
IMessageListener listener;
После создания объекта для класса ChatClient пользователь вызовет setListener для объекта. (Может быть addListerer для нескольких слушателей)
public void setListener(IMessageListener listener) {
this.listener = listener;
}
А в методе библиотеки при получении сообщения я бы вызвал метод getMessage для этого объекта слушателя
Это был базовый пример. Более сложные библиотеки будут использовать более сложные методы, такие как реализация очередей событий, многопоточность, параллелизм и т. Д.
Редактировать: И да. это действительно модель наблюдателя