TGViewer
Библиотека собеса по Java | вопросы с собеседований Библиотека собеса по Java | вопросы с собеседований @java_interview_lib · 6.44K subscribers
Post #1340 995
Расскажите о паттерне Observer

Observer — это поведенческий паттерн, который создаёт механизм подписки, позволяя одним объектам следить за изменениями в других.

Простыми словами: как подписка на Telegram-канал — когда выходит новый пост, все подписчики получают уведомление автоматически.

▪️ Пример:

Сервис обработки заказов: при смене статуса нужно уведомить склад, аналитику и клиента. Вместо жёстких вызовов — подписка.

// Событие
record OrderEvent(String orderId, String status) {}

// Подписчик
interface OrderListener {
void onOrderStatusChanged(OrderEvent event);
}

// Издатель
class OrderService {
private final List<OrderListener> listeners = new ArrayList<>();

public void subscribe(OrderListener listener) {
listeners.add(listener);
}

public void changeStatus(String orderId, String newStatus) {
// бизнес-логика...
OrderEvent event = new OrderEvent(orderId, newStatus);
listeners.forEach(l -> l.onOrderStatusChanged(event));
}
}

// Конкретные подписчики
class WarehouseListener implements OrderListener {
public void onOrderStatusChanged(OrderEvent event) {
if ("PAID".equals(event.status())) {
System.out.println("Склад: начать сборку " + event.orderId());
}
}
}

class AnalyticsListener implements OrderListener {
public void onOrderStatusChanged(OrderEvent event) {
System.out.println("Аналитика: статус " + event.status());
}
}

// Использование
OrderService service = new OrderService();
service.subscribe(new WarehouseListener());
service.subscribe(new AnalyticsListener());

service.changeStatus("ORD-42", "PAID");
// Склад: начать сборку ORD-42
// Аналитика: статус PAID


▪️ Когда использовать

Изменение одного объекта требует обновления других, и набор зависимых объектов заранее неизвестен
Хотите избежать жёсткой связи между компонентами
В Spring: ApplicationEventPublisher — встроенный Observer

▪️ Минус

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

🐸 Библиотека собеса по Java

#patterns
  • 🔥 5
  • 👍 2
  • 🤔 1
More from @java_interview_lib
  1. Sep 15, 2026❓ Расскажите о паттерне Facade Facade — это структурный паттерн, который предоставляет про…
  2. Sep 15, 2026😭 Как не потратить недельный лимит AI-кодинга за три дня? Разберём на вебинаре, как трати…
  3. Aug 5, 2026❓ Что такое "diamond problem" и как его решает Java? «Diamond problem» возникает при множе…
  4. Aug 5, 2026👅 Самое сложное — выбрать не курс, а направление Сегодня хочется разобраться в AI-агентах…
  5. Aug 5, 2026Один доступ вместо вечного выбора между «нужно для работы» и «давно хотелось изучить» 👇
  6. Jul 31, 2026❓ Как работает ConcurrentHashMap? ConcurrentHashMap использует сегментирование / распростр…
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 →