Observable: визуальный подход к программированию и анализу данных
Observable - это паттерн проектирования, который позволяет объекту отправлять уведомления своим наблюдателям об изменениях своего состояния.
В примере ниже показана реализация паттерна Observable на языке Java:
import java.util.ArrayList;
import java.util.List;
interface Observer {
void update();
}
class Observable {
private List observers = new ArrayList<>();
public void addObserver(Observer observer) {
observers.add(observer);
}
public void removeObserver(Observer observer) {
observers.remove(observer);
}
public void notifyObservers() {
for (Observer observer : observers) {
observer.update();
}
}
}
class ConcreteObservable extends Observable {
private String state;
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
notifyObservers(); // отправляем уведомление об изменении состояния
}
}
class ConcreteObserver implements Observer {
private ConcreteObservable observable;
public ConcreteObserver(ConcreteObservable observable) {
this.observable = observable;
observable.addObserver(this); // подписываемся на уведомления от наблюдаемого объекта
}
@Override
public void update() {
System.out.println("Состояние наблюдаемого объекта изменилось: " + observable.getState());
}
}
public class Main {
public static void main(String[] args) {
ConcreteObservable observable = new ConcreteObservable();
ConcreteObserver observer = new ConcreteObserver(observable);
observable.setState("Новое состояние"); // изменяем состояние наблюдаемого объекта, что вызывает уведомление наблюдателя
}
}
В данном примере класс `Observable` представляет наблюдаемый объект, у которого есть методы для добавления/удаления наблюдателей и отправки уведомлений. Класс `ConcreteObservable` наследуется от `Observable` и представляет конкретную реализацию наблюдаемого объекта. У него есть свойство `state`, изменение которого вызывает отправку уведомлений наблюдателям. Класс `Observer` представляет наблюдателя, у которого есть метод `update()`, который будет вызываться при получении уведомления. Класс `ConcreteObserver` наследуется от `Observer` и реализует метод `update()`, который просто выводит текущее состояние наблюдаемого объекта.
В методе `main()` создается объект `ConcreteObservable` и объект `ConcreteObserver`, при этом объект `ConcreteObserver` подписывается на уведомления от наблюдаемого объекта. Затем изменяется состояние наблюдаемого объекта, что вызывает вызывает отправку уведомления наблюдателю. В результате на консоль будет выведено сообщение "Состояние наблюдаемого объекта изменилось: Новое состояние".