Sobes.tech
Junior — Middle
103

Poți explica cum funcționează pattern-ul Observer și care sunt avantajele sale?

Companiile au fost întrebate
СБЕРСБЕР

Răspuns de la 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();
    }
}