Позвольте мне начать с простого сравнения: представьте поток как туннель, который помогает потребителю получать данные от производителя.
Цель этой статьи - рассказать, почему и что такое потоки, какой механизм скрывается под капотом.
Повестка дня
- Почему стрим
- Что такое Stream
- Основные концепции Stream
Почему?
Когда нам нужно разработать наш код, в котором данные должны быть реактивными
рассмотрим приведенный ниже пример
Надеюсь, это проясняет причину.
Что?
Stream - это помощник, который помогает нам связать производителя с подписчиком, и они сохраняют ценность в течение определенного периода времени.
Stream построен на основе паттернов Observer и Publisher / Subscriber.
Шаблон наблюдателя
Шаблон наблюдателя - это шаблон разработки программного обеспечения, в котором объект, называемый субъектом, поддерживает список своих зависимых элементов, называемых наблюдателями, и автоматически уведомляет их о любых изменениях состояния (обычно вызывая один из их методов).
Шаблон "Издатель / подписчик"
"Публикация и подписка" - это шаблон обмена сообщениями, при котором отправители сообщений, называемые издателями, не программируют отправку сообщений непосредственно определенным получателям, называемым подписчиками.
Observer и Pub / Sub концептуально схожи с основным отличием, указанным ниже.
В шаблоне Pub / Sub издатель и подписчик не знают о существовании друг друга.
Существует третий компонент, называемый брокером, или брокером сообщений, или шиной событий, который известен как издателю, так и подписчику, который фильтрует все входящие сообщения и соответствующим образом распределяет их.
Основные концепции
При построении потока задействовано множество концепций, давайте поговорим о каждой.
- Наблюдатель
- Наблюдаемый
- Горячие и холодные наблюдаемые
- Тематические варианты
Наблюдатель
Рассматривайте Observer как интерфейс / объект, который будет зарегистрирован в потоках для получения подписки.
Наблюдаемый
Observable - это коммуникационный туннель, о котором мы говорили.
Observable - это функция, связывающая наблюдателя с производителем.
Это объектный класс, который отправляет уведомление подписчику, вызывая методы в наблюдателе.
При запуске Observable функция подписки передается как параметр конструктора. Обычно эта функция подписки во многих случаях выступает в роли производителя.
Операторы наблюдаемые, которые работают с наблюдаемым источником.
Рассмотрим пример использования
Мы создали функцию подписки, которая содержит внутри логику производителя и передана в качестве аргумента конструктора для создания потока.
Как только поток подписан, производитель отправляет данные.
Наблюдаемое горячее и холодное
Наблюдаемый режим зависит от того, где ваш продюсер создан и активирован.
COLD - это когда ваш наблюдаемый объект создает / активирует производителя (производитель создал * внутри * наблюдаемого)
HOT - это когда ваш наблюдаемый объект слушает созданный / активированный продукт (Производитель создал * за пределами * наблюдаемого)
Варианты темы
Мы собираемся обсудить все варианты темы. Они есть
- Тема
- Тема поведения
- Повторить тему
- Асинхронная тема
Тема
Субъект одновременно является Наблюдателем и Наблюдателем.
- Объект, который помогает нам помещать данные в поток, и объект подписки получает то же самое.
- Субъект имеет тот же наблюдаемый объект (в этом случае наблюдаемый является горячим)
- Он действует как мост / прокси между наблюдаемым источником и многими наблюдателями, позволяя нескольким наблюдателям совместно использовать одно и то же наблюдаемое выполнение.
Тема поведения
Это своего рода предмет со следующими ингредиентами
- Инициализация объекта требует начального значения, так как оно всегда возвращается как значение при подписке.
- При подписке возвращает последнее значение темы.
- В любой момент вы можете получить последнее значение объекта с помощью метода getValue ().
Тема повтора
Тип объекта со следующим поведением
- Инициализация объекта выполняется с размером буфера воспроизведения.
- когда приходит будущая подписка, учитывая размер буфера воспроизведения, эти старые / прошлые значения возвращаются из буфера, поддерживаемого внутри.
Асинхронная тема
Вариант субъекта, который отправляет только последнее значение выполнения Observable всем подписчикам и только после завершения выполнения.
Заключение
Короче говоря, Stream является посредником между производителем и потребителем.
В значительной степени я попытался скрыть все основные концепции, которые скрываются под капотом реактивного потока.
Вы можете найти полную базу кода в GitHub здесь.
Надеюсь, это поможет сообществу 😃
✉️ Подпишитесь на рассылку еженедельно Email Blast 🐦 Подпишитесь на CodeBurst на Twitter , просмотрите 🗺️ План развития веб-разработчиков на 2018 год и 🕸️ Изучите веб-разработку с полным стеком .