2015-02-11 3 views
4

Как реактивное программирование отличается от вызова функции в прослушивателе событий (мышь, клавиша), потому что оба являются своего рода асинхронным потоком событий, так что вызывает вызов Reactive over традиционные прослушиватели событий?Java -Reactive Programming vs Event Listener

+1

Как это дублируется, когда связанный вопрос java * script * – LegendLength

ответ

4

слушатель событий имеет фактически только подмножество функциональных возможностей, предоставляемых RxJava, и это именно проблема, которую он пытается решить:

Но давайте вернемся на несколько шагов, это легче понять, что такое Observable, если вы сравниваете его с Iterator (push vs. pull).

Iterator.next() равнозначно Observable.onNext() - когда происходит следующее событие/событие - потребляйте его.

Iterator.hasNext() - это эквивалент Observable.onComplete() - он позволяет издателю уведомить абонента о том, что больше нет событий для потребления (одна вещь, отсутствующая в модели EventListener).

Для третьего, Observable.onError() нет эквивалента, потому что с итератором, когда вы пытаетесь получить next() или remove() вы знаете, что вы можете получить NoSuchElementException, UnsupportedOperationException или IllegalStateException и вы можете перехватывать и обрабатывать любого из них, так как вы делая это синхронно.

Для издателя при возникновении ошибки нет возможности уведомить пользователя-слушателя/абонента, а затем об авариях. onError() - последняя отсутствующая часть, которая была сделана так, чтобы Observable мог включить грациозную обработку любой ошибки.

Подводя итог, Reactive Java приступила к исправлению деталей, отсутствовавших в модели событий в течение длительного времени. Предоставляя эти недостающие части и предоставляя функциональный стиль программирования (поддерживает карту, плоскую карту, фильтр и т. Д.), Он помогает создавать асинхронные вызовы естественным, читаемым способом, уменьшая шаблонный код, который необходим, когда стиль программирования является обязательным (например, вложенный в -loops) и который создает callback-hell.

+0

информативная благодарность, можете ли вы предложить какой-то сайт, чтобы начать реактивное программирование. – Jeevanantham

+0

@ jerith2 первые две ссылки в моем ответе будут хорошим началом! – alfasin