Функциональное программирование уже завоевало популярность, по моему скромному мнению, это просто не очень видимо все же. Сила таких языков является mathematics/algorhithms, который является одной из причин, почему Парни Halo используют его для своего материала TrueSkill.
Я реализовал решение, которое работает практически в любой версии Delphi - изначально оно было реализовано в Delphi 7, хотя я не тестировал его в более ранних версиях (но если вы используя Delphi 7 самостоятельно, тогда это все, что вам нужно знать, верно?). :)
iirc это было, по крайней мере, частично вдохновением для сообщения Аллена Бауэра. Вы можете увидеть мою реализацию, продемонстрированную в некоторых видеороликах, и загрузить код из моего блога :
Интересующие вас сообщения помечены как "многоадресная рассылка". Ссылка для загрузки окончательного кода доступна в этом сообщении .
В моем подходе вы наследуете класс от TMultiCastEvent. Все, что нужно сделать вашему производному классу, - это реализовать некоторую простую защиту типа для добавления, удаления и вызова события с определенной сигнатурой. такие как возможность отключать события и автоматически удалять обработчики из обработчиков при уничтожении реализующего объекта (это включает в себя небольшую служебную деятельность, которую можно игнорировать, если необходимо, но которая может быть полезна при определенных обстоятельствах).
Все это описан и продемонстрирован в моих сообщениях в блоге.
Наслаждайтесь. :)
У Аллена Бауэра есть сообщение в блоге о многоадресных событиях , которое может быть полезным. Однако это работает только для Delphi 2009 или новее.
РЕДАКТИРОВАТЬ: Если вы все еще используете D7, вы все равно сможете выполнить эту работу, если вам не нужно слишком много разных сигнатур событий. Попробуйте посмотреть на Аллена '
Для этого вы можете использовать шаблон проектирования наблюдателя. Вот пример реализации delphi: http://blogs.teamb.com/joannacarter/2004/06/30/690
Если вы реализуете систему плагинов, я думаю, вы не сможете просто обойтись без обработчиков событий - будь то многоадресная рассылка или нет. Предлагаю взглянуть на паттерн наблюдателя . Может показаться слишком многословным рядом с многоадресными событиями, но, по крайней мере, более гибким, когда вам нужно.