Назад к вопросам
СБЕР
Junior — Middle
75
Можете объяснить, как работает паттерн Observer и в чем его преимущества?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Паттерн Observer (Наблюдатель) позволяет объекту (издателю) уведомлять множество других объектов (наблюдателей) об изменениях своего состояния без тесной связи между ними.
Основная идея: наблюдатели подписываются на издателя, и когда у издателя происходит событие или изменение, он автоматически оповещает всех подписчиков.
Преимущества:
- Слабая связанность между объектами — издатель не знает деталей наблюдателей.
- Гибкость — можно динамически добавлять или удалять наблюдателей.
- Удобство реализации событийной модели.
Пример на Java:
import java.util.*;
interface Observer {
void update(String message);
}
class Subject {
private List<Observer> observers = new ArrayList<>();
void addObserver(Observer o) {
observers.add(o);
}
void removeObserver(Observer o) {
observers.remove(o);
}
void notifyObservers(String message) {
for (Observer o : observers) {
o.update(message);
}
}
void changeState() {
// какое-то изменение
notifyObservers("Состояние изменилось");
}
}
class ConcreteObserver implements Observer {
private String name;
ConcreteObserver(String name) { this.name = name; }
public void update(String message) {
System.out.println(name + " получил уведомление: " + message);
}
}
public class Main {
public static void main(String[] args) {
Subject subject = new Subject();
Observer o1 = new ConcreteObserver("Наблюдатель 1");
Observer o2 = new ConcreteObserver("Наблюдатель 2");
subject.addObserver(o1);
subject.addObserver(o2);
subject.changeState();
}
}