Проект представляет собой реактивную систему обработки потоков событий , построенную на паттерне «Наблюдатель» (Observer). В нём реализованы:
- Базовые компоненты: Observable, Observer, Disposable.
- Операторы для преобразования и объединения потоков.
- Планировщики потоков (Scheduler), управляющие выполнением задач в разных потоках.
- Поддержка отмены подписок, логгирование через Log4j.
- Java 17+
- Maven — сборка и управление зависимостями
- Log4j — логгирование
- JUnit 5 — тестирование
├── pom.xml
├── ReadMe.md
└── src/
├── main/
│ ├── java/
│ │ ├── dn/
│ │ │ ├── dn.operator
│ │ │ │ ├── Concat.java
│ │ │ │ ├── Filter.java
│ │ │ │ ├── FlatMap.java
│ │ │ │ ├── Merge.java
│ │ │ │ └── Reduce.java
│ │ │ ├── dn.rx
│ │ │ │ ├── Observer.java
│ │ │ │ ├── Subscribe.java
│ │ │ │ └── impl
│ │ │ │ ├── CompositeDisposableImpl.java
│ │ │ │ ├── DisposableImpl.java
│ │ │ │ ├── DisposedAwareObserverImpl.java
│ │ │ │ └── Observable.java
│ │ │ ├── dn.scheduler
│ │ │ │ ├── Scheduler.java
│ │ │ │ └── impl
│ │ │ │ ├── ComputationImpl.java
│ │ │ │ ├── IOImpl.java
│ │ │ │ └── SingleImpl.java
│ │ │ └── dn.Main.java
│ │ └── resources/
│ │ └── log4j.properties
│ └── test/
│ └── java/
│ ├── ObservableTest.java
│ ├── OperatorTest.java
│ └── SchedulerTest.java
- Observable.java - Источник данных. Методы:
-
- create()
-
- just()
- Observer.java Интерфейс потребителя с методами:
-
- onNext()
-
- onError()
-
- onComplete()
Расположены в пакете operators:
- Map.java - Преобразует каждый элемент потока
- Filter.java - Отбирает элементы по условию
- FlatMap.java - Преобразует элементы в новые потоки
- Merge.java - Объединяет несколько потоков
- Concat.java - Последовательно объединяет потоки
- Reduce.java - Сворачивает поток в одно значение
Позволяют управлять потоками выполнения:
- IOImpl.java: Для I/O операций и сетевых вызовов
- ComputationImpl.java: Для вычислений
- SingleImpl.java: Для последовательной обработки
- DisposableImpl.java: Управление одной подпиской.
- CompositeDisposableImpl.java: Групповая отмена подписок.
mvn clean test- сборка и запуск тестовmvn exec:java -Dexec.mainClass="org.example.dn.Main"- запуск демо
