Когда у какой-то херни есть доступ к глубинам системы, и куча самых разных объектов, которые на него подписались. Каждый раз, когда что-то происходит, главный ходит циклом по тем, что на него подписались, и скидывает им событие вызовом метода. Объект сам решает, нужно оно ему или нет.
Хороший пример: ты в свою игру хочешь добавить ачивку "упал с горы но выжил". Прямое решение - if if if if if if if if if if if if if if if. Еще нужно сломать инкапсуляцию физического движка, найти позицию той горы, постоянно отслеживать, упал с нее ГГ или нет... короче нахер ООП.
Нормальное решение - физический движок реализует механизм оповещения о проишествиях, другие механизмы на него подписываются. В том числе механизм ачивок. Каждый раз, когда что-то происходит, ФД всем об этом рассказывает, остальные сами решают, нужно им это или нет.
В итоге получается такая изящная асинхронность.