Статья
Шаблон проектирования "Наблюдатель"

Шаблон проектирования "Наблюдатель"

25 ноября 2017

В PHP (начиная с 5.1) имеются интерфейсы SplObserver и SplSubject, позволяющие реализовать шаблон "Наблюдатель".

Класс, получающий уведомления:

class UserObserver implements \SplObserver
{
    public function update(\SplSubject $subject)
    {
        ...
    }
}

 

Класс, отправляющий уведомления:

class User implements \SplSubject
{

    private $email;

    private $observers;

    public function __construct()
    {
        $this->observers = new \SplObjectStorage();
    }

    public function attach(\SplObserver $observer)
    {
        $this->observers->attach($observer);
    }

    public function detach(\SplObserver $observer)
    {
        $this->observers->detach($observer);
    }

    public function changeEmail($email)
    {
        $this->email = $email;
        $this->notify();
    }

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

 

Использование:

$observer = new UserObserver();

$user = new User();
$user->attach($observer);
$user->changeEmail('test@test.com');



Источники:

http://designpatternsphp.readthedocs.io/ru/latest/Behavioral/Observer/README.html
https://habrahabr.ru/company/mailru/blog/325492/