Позвольте мне начать с простого сравнения: представьте поток как туннель, который помогает потребителю получать данные от производителя.

Цель этой статьи - рассказать, почему и что такое потоки, какой механизм скрывается под капотом.

Повестка дня

  1. Почему стрим
  2. Что такое Stream
  3. Основные концепции Stream

Почему?

Когда нам нужно разработать наш код, в котором данные должны быть реактивными

рассмотрим приведенный ниже пример

Надеюсь, это проясняет причину.

Что?

Stream - это помощник, который помогает нам связать производителя с подписчиком, и они сохраняют ценность в течение определенного периода времени.

Stream построен на основе паттернов Observer и Publisher / Subscriber.

Шаблон наблюдателя
Шаблон наблюдателя - это шаблон разработки программного обеспечения, в котором объект, называемый субъектом, поддерживает список своих зависимых элементов, называемых наблюдателями, и автоматически уведомляет их о любых изменениях состояния (обычно вызывая один из их методов).

Шаблон "Издатель / подписчик"
"Публикация и подписка" - это шаблон обмена сообщениями, при котором отправители сообщений, называемые издателями, не программируют отправку сообщений непосредственно определенным получателям, называемым подписчиками.

Observer и Pub / Sub концептуально схожи с основным отличием, указанным ниже.

В шаблоне Pub / Sub издатель и подписчик не знают о существовании друг друга.

Существует третий компонент, называемый брокером, или брокером сообщений, или шиной событий, который известен как издателю, так и подписчику, который фильтрует все входящие сообщения и соответствующим образом распределяет их.

Основные концепции

При построении потока задействовано множество концепций, давайте поговорим о каждой.

  1. Наблюдатель
  2. Наблюдаемый
  3. Горячие и холодные наблюдаемые
  4. Тематические варианты

Наблюдатель

Рассматривайте Observer как интерфейс / объект, который будет зарегистрирован в потоках для получения подписки.

Наблюдаемый

Observable - это коммуникационный туннель, о котором мы говорили.

Observable - это функция, связывающая наблюдателя с производителем.
Это объектный класс, который отправляет уведомление подписчику, вызывая методы в наблюдателе.

При запуске Observable функция подписки передается как параметр конструктора. Обычно эта функция подписки во многих случаях выступает в роли производителя.

Операторы наблюдаемые, которые работают с наблюдаемым источником.

Рассмотрим пример использования

Мы создали функцию подписки, которая содержит внутри логику производителя и передана в качестве аргумента конструктора для создания потока.

Как только поток подписан, производитель отправляет данные.

Наблюдаемое горячее и холодное

Наблюдаемый режим зависит от того, где ваш продюсер создан и активирован.

COLD - это когда ваш наблюдаемый объект создает / активирует производителя (производитель создал * внутри * наблюдаемого)

HOT - это когда ваш наблюдаемый объект слушает созданный / активированный продукт (Производитель создал * за пределами * наблюдаемого)

Варианты темы

Мы собираемся обсудить все варианты темы. Они есть

  1. Тема
  2. Тема поведения
  3. Повторить тему
  4. Асинхронная тема

Тема

Субъект одновременно является Наблюдателем и Наблюдателем.

  1. Объект, который помогает нам помещать данные в поток, и объект подписки получает то же самое.
  2. Субъект имеет тот же наблюдаемый объект (в этом случае наблюдаемый является горячим)
  3. Он действует как мост / прокси между наблюдаемым источником и многими наблюдателями, позволяя нескольким наблюдателям совместно использовать одно и то же наблюдаемое выполнение.

Тема поведения

Это своего рода предмет со следующими ингредиентами

  1. Инициализация объекта требует начального значения, так как оно всегда возвращается как значение при подписке.
  2. При подписке возвращает последнее значение темы.
  3. В любой момент вы можете получить последнее значение объекта с помощью метода getValue ().

Тема повтора

Тип объекта со следующим поведением

  1. Инициализация объекта выполняется с размером буфера воспроизведения.
  2. когда приходит будущая подписка, учитывая размер буфера воспроизведения, эти старые / прошлые значения возвращаются из буфера, поддерживаемого внутри.

Асинхронная тема

Вариант субъекта, который отправляет только последнее значение выполнения Observable всем подписчикам и только после завершения выполнения.

Заключение

Короче говоря, Stream является посредником между производителем и потребителем.

В значительной степени я попытался скрыть все основные концепции, которые скрываются под капотом реактивного потока.

Вы можете найти полную базу кода в GitHub здесь.

Надеюсь, это поможет сообществу 😃

✉️ Подпишитесь на рассылку еженедельно Email Blast 🐦 Подпишитесь на CodeBurst на Twitter , просмотрите 🗺️ План развития веб-разработчиков на 2018 год и 🕸️ Изучите веб-разработку с полным стеком .