Шаблон делегирования

Существует еще один способ моделирования взаимоотношений между фигурой и окружностью – делегирование, который демонстрируется в примере 10.4. В то время как при использовании смешанных классов все свойства фактически копируются в единственный экземпляр объекта, в случае делегирования ответственность за наличие некоторых свойств возлагается на другой объект, который уже обладает ими.

Пример 10.4. Делегирование – альтернатива наследованию
//Создать простой объект
var shape = {}
//Добавить в него все, чем должен обладать этот экземпляр
dojo.mixin(shape, {
centerX : 10,
centerY : 20,
color : "blue"
});
//объект окружности делегирует ответственность за свойства centerX, centerY,
//и color объекту фигуры и добавляет свое свойство radius
circle = dojo.delegate(shape, {
radius : 2
});

Главная особенность этого примера в том, что свойство radius, определенное в виде объекталитерала, добавляется в объект окружности, а остальные свойства фигуры – нет. Вместо этого всякий раз, когда происходит обращение к свойствам объекта окружности, которых он не имеет, он делегирует эти обращения к объекту фигуры.


Таким образом:

• Значение свойства radius возвращается непосредственно объектом circle, потому что свойство radius было добавлено непосредственно в этот объект.
• Значения свойств centerX, centerY и color извлекаются из объекта shape, потому что они отсутствуют в объекте circle (если говорить в общих чертах).
• При обращении к любым другим свойствам по определению возвращается значение undefined, потому что они отсутствуют в объектах circle и shape.

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

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела Dojo на эту тему:
JavaScript – это не Java
Вызов унаследованных методов
Имитация классов с использованием средств Dojo
Множественное наследование посредством смешивания классов
Наследование в JavaScript