Sobes.tech
Junior — Middle

Ar galite paaiškinti Observer šablono veikimo principą ir kokiose scenarijuose jis naudojamas?

sobes.tech AI

Atsakymas iš AI

Паттерн Observer реализует механизм подписки, при котором один объект (наблюдаемый) уведомляет множество других объектов (наблюдателей) об изменениях своего состояния. Это позволяет отделить источник событий от обработчиков, обеспечивая слабую связанность.

Сценарии использования:

  • Реализация событийной системы, например, обновление UI при изменении данных.
  • Логирование или аудит, когда нужно реагировать на изменения без вмешательства в основной код.
  • В системах с плагинами, где плагины подписываются на события.

Пример на PHP:

interface Observer {
    public function update($data);
}

class Subject {
    private $observers = [];
    private $state;

    public function attach(Observer $observer) {
        $this->observers[] = $observer;
    }

    public function setState($state) {
        $this->state = $state;
        $this->notify();
    }

    private function notify() {
        foreach ($this->observers as $observer) {
            $observer->update($this->state);
        }
    }
}

class ConcreteObserver implements Observer {
    public function update($data) {
        echo "State updated to: $data\n";
    }
}

$subject = new Subject();
$observer = new ConcreteObserver();
$subject->attach($observer);
$subject->setState('new state');