Реализация fire метода для вызова слушателей
Обычно, по крайней мере я, реализую слушателей следующим образом:
1. Объёвляется интерфейс слушателя ~ IListener.
2. В бине/класса объявляется поле Set<IListenere> listeners = new HashSet();
3. Добавляются методы addListener(IListener), removeListener(IListener)
4. Для каждого метода определённого в IListener реализуется метод fire
Всё это довольно заморочно и трудоёмко, особенно напрягает реализовывать
по 5-10 fire* методов.
Но, функциональность fire* методов можно реализовать и через proxy.
Создать proxy-класс на основе интерфеса слушателя, а в handler-е,
в том же цикле вызывать соответствующий метод для каждого
элемент коллекции слушателей.
Я нашёл реализацию такого подхода:
http://www.t-deli.com/listeners.html - малююсенькая библиотека,
реализует именно описанный proxy. Работает это примерно так:
Что то подобное реализовано в: http://sourceforge.net/projects/jitterbit
google code - jitterbit (код).
Но там это скорее внутренняя функциональность.
--
Идея, как мне кажется, хорошая. Кто нибудь пользуется чем то подобным
или есть лучшие решения?
1. Объёвляется интерфейс слушателя ~ IListener.
2. В бине/класса объявляется поле Set<IListenere> listeners = new HashSet();
3. Добавляются методы addListener(IListener), removeListener(IListener)
4. Для каждого метода определённого в IListener реализуется метод fire
protected void fireOnDisplay(){
for(IListener lst:listeners) {
lst.onDisplay();
}
}
Всё это довольно заморочно и трудоёмко, особенно напрягает реализовывать
по 5-10 fire* методов.
Но, функциональность fire* методов можно реализовать и через proxy.
Создать proxy-класс на основе интерфеса слушателя, а в handler-е,
в том же цикле вызывать соответствующий метод для каждого
элемент коллекции слушателей.
Я нашёл реализацию такого подхода:
http://www.t-deli.com/listeners.html - малююсенькая библиотека,
реализует именно описанный proxy. Работает это примерно так:
private IListenerManager _keyLMgr = new GenListenerManager(KeyListener.class);
private KeyListener _keyLProxy = (KeyListener) _keyLMgr.getProxy();
public void addListener(KeyListener lst) { _keyLMgr.addListener(lst); }
public void removeListener(KeyListener lst) { _keyLMgr.removeListener(lst); }
...... {
_keyLProxy.keyPressed(event);
_keyLProxy.keyReleased(event);
_keyLProxy.keyTyped(event);
}
Что то подобное реализовано в: http://sourceforge.net/projects/jitterbit
google code - jitterbit (код).
Но там это скорее внутренняя функциональность.
--
Идея, как мне кажется, хорошая. Кто нибудь пользуется чем то подобным
или есть лучшие решения?
