Sobes.tech
Junior — Middle
116

Können Sie erklären, wie das Observer-Muster funktioniert und welche Vorteile es hat?

Unternehmen wurden gefragt
СБЕРСБЕР

Antwort von AI

sobes.tech KI

Паттерн 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();
    }
}