Sobes.tech
Junior — Middle
110

¿Puedes explicar cómo funciona el patrón Observer y cuáles son sus ventajas?

Empresas donde se preguntó
СБЕРСБЕР

Respuesta de la IA

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