Шаблон наблюдатель

Шаблон наблюдатель

Наблюдатель, Observer — поведенческий шаблон проектирования. Также известен как «подчинённые» (Dependents), «издатель-подписчик» (Publisher-Subscriber).

Содержание

Назначение

Определяет зависимость типа «один ко многим» между объектами таким образом, что при изменении состояния одного объекта все зависящие от него оповещаются об этом событии.

Реализация

Файл:Observer.png

При реализации шаблона «наблюдатель» обычно используются следующие классы.

  • Observable — интерфейс, определяющий методы для добавления, удаления и оповещения наблюдателей.
  • Observer — интерфейс, с помощью которого наблюдаемый объект оповещает наблюдателей.
  • ConcreteObservable — конкретный класс, который реализует интерфейс Observable.
  • ConcreteObserver — конкретный класс, который реализует интерфейс Observer.

Область применения

Шаблон «наблюдатель» применяется в тех случаях, когда система обладает следующими свойствами:

  • существует, как минимум, один объект, рассылающий сообщения
  • имеется не менее одного получателя сообщений, причём их количество и состав могут изменяться во время работы приложения.

Данный шаблон часто применяют в ситуациях, в которых отправителя сообщений не интересует, что делают с предоставленной им информацией получатели.

Примеры

PHP5

interface Observer{
	function notify($obj);
}
 
class ExchangeRate{
	static private $instance = NULL;
	private $observers = array();
	private $exchange_rate;
 
	private function ExchangeRate(){
	}
 
	static public function getInstance(){
		if(self::$instance == NULL){
		self::$instance = new ExchangeRate();
		}
	return self::$instance;
	}
 
	public function getExchangeRate(){
	return $this->$exchange_rate;
	}
 
	public function setExchangeRate($new_rate){
	$this->exchange_rate = $new_rate;
	$this->notifyObservers();
	}
 
	public function registerObserver($obj){
	$this->observers[] = $obj;
	}
 
	function notifyObservers(){
		foreach($this->observers as $obj){
		$obj->notify($this);
		}
	}
}
 
class ProductItem implements Observer{
 
	public function __construct(){
	ExchangeRate::getInstance()->registerObserver($this);
	}
 
	public function notify($obj){
		if($obj instanceof ExchangeRate) {
		// Update exchange rate data
		print "Received update!\n";
		}
	}
}
 
$product1 = new ProductItem();
$product2 = new ProductItem();
ExchangeRate::getInstance()->setExchangeRate(4.5);


Поведенческие шаблоны проектирования
[править]

Interpreter/Интерпретатор | Template Method/Шаблонный метод | Chain of Responsibility/Цепочка обязанностей | Iterator/Итератор, Cursor | Mediator/Посредник | Memento/Хранитель, Token | Observer/Наблюдатель, Listener | State/Состояние | Strategy/Стратегия | Visitor/Посетитель | Event listener | Single-serving visitor | Hierarchical visitor |


Wikimedia Foundation. 2010.

Игры ⚽ Нужно решить контрольную?

Полезное


Смотреть что такое "Шаблон наблюдатель" в других словарях:

  • Наблюдатель (модель) — Наблюдатель, Observer  поведенческий шаблон проектирования. Также известен как «подчинённые» (Dependents), «издатель подписчик» (Publisher Subscriber). Содержание 1 Назначение 2 Реализация 3 Область применения …   Википедия

  • Наблюдатель (шаблон проектирования) — У этого термина существуют и другие значения, см. Наблюдатель. Шаблон проектирования Наблюдатель Observer Тип: поведенческий Описан в Design Patterns Да Наблюдатель, Observer  поведенческий шаблон проектирования. Также известен ка …   Википедия

  • Шаблон делегирования — Шаблон проектирования Шаблон делегирования Delegation pattern Описан в Design Patterns Нет В разработке ПО, шаблон делегирования (англ. delegation pattern)  это способ, которым объект внешне выражает некоторое поведение, но в… …   Википедия

  • Шаблон функционального дизайна — Шаблон проектирования Шаблон функционального дизайна Functional design Описан в Design Patterns Нет Шаблон функционального дизайна (англ. Functional design)  это шаблон проектирования, использующийся для упрощения проектирования ПО …   Википедия

  • Шаблон проектирования — У этого термина существуют и другие значения, см. Паттерн. В разработке программного обеспечения, шаблон проектирования или паттерн (англ. design pattern) повторимая архитектурная конструкция, представляющая собой решение проблемы… …   Википедия

  • Наблюдатель — Дипломатический наблюдатель в дипломатии Наблюдатель (динамические системы) в математике Наблюдатель  сеть магазинов видеонаблюдения Наблюдатель (модель)  шаблон проектирования Наблюдатель  понятие в Специальной теории… …   Википедия

  • Наблюдатель (значения) — Дипломатический наблюдатель в дипломатии Наблюдатель (динамические системы) в математике Наблюдатель (модель)  шаблон проектирования Наблюдатель  понятие в Специальной теории относительности «Наблюдатель» / «Спектейтор» (англ. «The… …   Википедия

  • Шаблонный метод (шаблон проектирования) — Шаблон проектирования Шаблонный метод Template method Тип: поведенческий Описан в Design Patterns Да …   Википедия

  • Интерфейс (шаблон проектирования) — Шаблон проектирования Интерфейс Interface Описан в Design Patterns Нет В информатике, шаблон интерфейса не является особым шаблоном среди шаблонов проектирования. Он является общим методом для структурирования компьютерных программ для того …   Википедия

  • Хранитель (шаблон проектирования) — Шаблон проектирования Хранитель Memento Тип: поведенческий Описан в Design Patterns Да Хранитель (также известный как Memento, Token, Лексема) поведенческий шаблон проектирования. Позволяет, не нарушая инкапсуляцию, зафикс …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»