TGViewer
Flutter Friendly Flutter Friendly @flutterfriendly · 996 subscribers
Post #172 713
Привет, это Катя, Flutter Dev в Friflex 👋 Сегодня поговорим про Observer.

Что такое Observer?
Паттерн «Наблюдатель» (Observer) — это поведенческий паттерн проектирования, суть которого в том, что один объект (наблюдаемый) может автоматически уведомлять другие объекты (наблюдатели) о своих изменениях.

Это похоже на подписку: один объект «подписывается» на другой, чтобы быть в курсе изменений. Когда наблюдаемый объект изменяется — все подписчики получают уведомление и могут отреагировать.

Где это полезно?

Этот паттерн часто используется, когда:
▫️у нас есть модель данных, и мы хотим автоматически обновлять UI
▫️нужно разделить логику обработки и отображения данных
▫️необходимо уведомить несколько частей системы об одном событии

Как реализовать Observer?
✔️
Создаем абстракцию Observable (или Subject) — объект, за которым наблюдают
✔️Создаем абстракцию Observer — наблюдатель
✔️Реализуем логику хранения списка наблюдателей в Observable
✔️Реализуем метод update в Observer, чтобы обрабатывать изменения

Пример:
abstract class Observer {
  void update(int data);
}

class Observable {
  final _observers = <Observer>[];
  int _value = 0;

  void addObserver(Observer observer) => _observers.add(observer);
  void removeObserver(Observer observer) => _observers.remove(observer);

  set value(int newValue) {
    _value = newValue;
    _notify();
  }

  void _notify() {
    for (final o in _observers) {
      o.update(_value);
    }
  }
}

class LoggerObserver implements Observer {
  @override
  void update(int data) => print('Updated value: $data');
}

void main() {
  final observable = Observable();
  final observer = LoggerObserver();

  observable.addObserver(observer);

  observable.value = 1;
  observable.value = 2;

  observable.removeObserver(observer);
}


Что тут происходит:
▪️Observer — абстрактный класс с методом update, который вызывается при изменении состояния
▪️Observable — содержит список наблюдателей и уведомляет их при изменении значения переменной value
▪️LoggerObserver — конкретный наблюдатель, который просто печатает обновленное значение

В main() мы добавляем наблюдателя, изменяем значение, и он автоматически получает уведомления. Потом мы его удаляем из списка — и уведомления больше не приходят.

Плюсы:
✅ Слабая связанность — наблюдатель не зависит от внутренней логики наблюдаемого
✅ Гибкость — можно динамически добавлять и удалять наблюдателей
✅ Масштабируемость — несколько объектов могут реагировать на одно событие

Минусы:
⚠️ Перегрузка сообщений — большое количество наблюдателей может вызвать перегрузку
⚠️ Циклические зависимости — если наблюдатель и наблюдаемый зависят друг от друга
⚠️ Порядок уведомлений — не гарантируется порядок вызова update()

А во Flutter?
▫️
ChangeNotifier и ChangeNotifierProvider в Provider
▫️ValueNotifier + ValueListenableBuilder
▫️StreamBuilder, который реагирует на события стрима
▫️InheritedWidget и InheritedNotifier — это тоже про наблюдение за изменениями

Какой паттерн разобрать в следующий раз?🔍
  • 🔥 11
  • ❤ 5
  • 👍 3
More from @flutterfriendly
  1. May 14, 2026👀Какой сложный вопрос или тема по Flutter вас сейчас беспокоят? Может, задача не идет, ба…
  2. Apr 17, 2026💭Привет! Это Роза, Flutter-разработчица Friflex! Уверена, многие из вас знакомы с Dart De…
  3. Apr 8, 2026Привет, друзья! Делимся нашей страничкой на Хабре, чтобы всегда оставаться на связи. Там е…
  4. Apr 3, 2026🌸Апрель в календаре и на экране Весна зовет обновлять визуальное: убирать темные темы и в…
  5. Apr 1, 2026Всегда с нетерпением ждем этого дня, чтобы сделать подборку ИТ-мемов Пусть поводов для улы…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →