Шаблон программирования Observer (Наблюдатель, Dependents, Подчиненные, Publisher-Subscriber, Издатель-Подписчик) используется для оповещения зависимых объектов при изменения состояния наблюдаемого объекта.
UML диаграмма классов шаблона Observer
interface Observer { // Observer function handleEvent($obj); } class Cache implements Observer { // ConcreteObserver public function __construct() { Content::getInstance()->addObserver($this); } public function handleEvent($obj) { if($obj instanceof Content) { echo 'Объект Content сообщает об обновлении в объект Cache<br />'; $this->clear(); } } public function clear() { echo 'Кеш очищен<br />'; } } class Content { // ConcreteObservable static private $instance = null; private $observers = array(); private function __construct() {} private function __clone() {} private function __wakeup() {} static public function getInstance() { if(self::$instance == null) { self::$instance = new Content(); } return self::$instance; } public function addObserver(Observer $obj) { $this->observers[] = $obj; } public function removeObserver(Observer $obj) { $newObservers = array(); foreach ($this->observers as $obs) { if ($obj !== $obs) { $newObservers[] = $obs; } } $this->observers = $newObservers; } public function notifyObservers() { foreach($this->observers as $obj) { $obj->handleEvent($this); } } public function change() { echo 'Изменение контента<br />'; $this->notifyObservers(); } } $content = Content::getInstance(); $cache = new Cache(); $content->change(); // Изменение контента // Объект Content сообщает об обновлении в объект Cache // Кеш очищен
Похожие записи:
- Шаблон проектирования Factory method
- Шаблон проектирования Delegation
- PhpUnit тестирование
- Шаблон проектирования Abstract Factory
- Установка PEAR
Метки: php, шаблоны проектирования