Junior — Middle
100
Можете объяснить, как работает паттерн Observer и в чем его преимущества?
Сұралған компаниялар
AI-дан жауап
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();
}
}