Sobes.tech
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();
    }
}