forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Android (http://forum.boolean.name/forumdisplay.php?f=150)
-   -   Java Event System (http://forum.boolean.name/showthread.php?t=19995)

Жека 13.09.2015 08:47

Java Event System
 
Всем привет.

Поработав в с#, я пристрастился к его системе событий
PHP код:

public event EventHandler<MyEventArgssomeEvent;
....
if (
someEvent != null) {
  
someEvent(this, new MyEventArgs(1"hi"));


Решил написать аналог для джавы (не искал подобные решения, просто хотел сам сделать).
В итоге - есть репозиторий, кому интересно, попробуйте.
Репозиторий в github

Что внутри
  • Event & SimpleEvent - объект "событие", который будет генерировать событие.
  • IEventListener - слушатель, который подписывается на собития и ловит их сигналы.
  • EventSystem - вспомогательный класс, который позволяет отписаться от всех слушателей у всех событий конкретного объекта, который нужно (например) удалить (вызывать отписку нужно вручную, зато всего 1 строчка).

Как использовать

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

PHP код:

public final Event<MyEventArgseventSomethingHappen EventSystem.newEvent(this); 

Если будете использовать EventSystem, то объект с событием должен включать интерфейс IWithEvents.
Этот интерфейс пока пустой, используется для единообразия (возможно, это лишнее, я пока не решил).

Можем подписаться на созданное выше событие и обработать его:

PHP код:

myObj.eventSomethingHappen.subscribe(listener);
...
private final 
IEventListener<MyEventArgslistenerForSomethingHappen = new IEventListener<MyEventArgs>() {
  @
Override
  
public void onReceived(Object senderMyEventArgs args) {
    
// достаём какие-то данные из args, если надо
    // что-то делаем
    // отписываемся от события, если надо
  
}
}; 

Когда объект с событиями нужно удалить, мы можем отписать все его события от всех слушателей всего 1й строкой кода (при условии, что события создавали через EventSystem)

PHP код:

EventSystem.remove(this); // удаление из системы событий, а не из памяти 

Перед закрытием приложения можно использовать отвязку событий всех объектов

PHP код:

EventSystem.removeAllObjects(); 



Часовой пояс GMT +4, время: 14:43.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot