Есть ли в Delphi эквивалент для принципа слушателей Java? - PullRequest
7 голосов
/ 29 августа 2011

Мне просто любопытно на этом. Я знаю два способа определения событий в Delphi, используя принцип обратного вызова и принцип сообщений Windows.

Однако принцип сообщений не является объектно-ориентированным, и обратные вызовы подходят только для одного экземпляра.

Я хотел бы получить хорошее решение для одного события, когда два разных объекта могут выполнить действие после возникновения события.

В Java я мог бы просто добавить другого слушателя.

Кто-нибудь знает какой-нибудь эквивалентный подход в Delphi к принципу этого хорошего слушателя?

Ответы [ 3 ]

4 голосов
/ 29 августа 2011

Они также известны как многоадресные события, и Аллен Бауэр написал хорошую статью под названием Многоадресные события с использованием шаблонов , дающую хорошее освещение темы.

Короче говоря, многоадресные события не запекаются в языке / фреймворке, как в Java C #, но могут быть смоделированы с некоторой дополнительной работой. Введение дженериков сделало это несколько проще.

1 голос
/ 29 августа 2011

Уже есть аналогичное обсуждение по SO с некоторыми дополнительными ссылками на существующие реализации многоадресной рассылки.

0 голосов
/ 29 августа 2011

На самом деле это шаблон проектирования, называемый наблюдателем или слушателем (http://c2.com/cgi/wiki?ObserverPattern). Я полагаю, что вы могли бы написать реализацию вашего объекта таким образом, чтобы вы могли зарегистрировать список наблюдателей, которые могли бы получать уведомления о любых изменениях. в вашем коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...