Как описать паттерн Наблюдатель (Observer)?

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

Короткий ответ

Паттерн Наблюдатель — это поведенческий паттерн проектирования, в котором объект (субъект) уведомляет другие объекты (наблюдатели) о изменении своего состояния. Это полезно для реализации систем обработки событий. В PHP паттерн Наблюдатель может быть реализован с помощью интерфейсов SplObserver и SplSubject из стандартной библиотеки.

Длинный ответ

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

 

Основные компоненты паттерна:

- Субъект (Subject): Это объект, который хранит состояние и уведомляет наблюдателей о его изменении.

- Наблюдатель (Observer): Это объект, который слушает изменения состояния субъекта и реагирует на эти изменения.

 

Пример реализации в PHP:

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

class User implements Observer {
    public function update($data) {
        echo "User notified with data: " . $data;
    }
}

class RoleChange implements SplSubject {
    private $observers = [];
    private $role;

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

    public function detach(SplObserver $observer) {
        $this->observers = array_filter($this->observers, function($obs) use ($observer) {
            return $obs !== $observer;
        });
    }

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

    public function setRole($role) {
        $this->role = $role;
        $this->notify();
    }
}


Паттерн Наблюдатель полезен для создания событийных систем, где изменения одного объекта уведомляют другие. В PHP для его реализации можно использовать встроенные интерфейсы SplObserver и SplSubject.

Уровень

  • Рейтинг:

    3

  • Сложность:

    7

Навыки

  • PHP

Ключевые слова

Подпишись на PHP Developer в телеграм