Думаю, вас может смутить тот факт, что многие объекты в AS3 расширяют EventDispatcher выше в дереве наследования, поскольку для отправки событий требуется только импортировать пакет flash.events.Например, многие классы DisplayObject расширяют EventDispatcher.Вот несколько примеров:
Shape » DisplayObject » EventDispatcher » Object
Sprite » DisplayObjectContainer » InteractiveObject » DisplayObject » EventDispatcher » Object
Обычно я расширяю EventDispatcher каждый раз, когда я работаю с пользовательским классом, которому просто нужно сообщать объекты вне его области действия, если какое-то внутреннее свойство изменилось илифункция происходит.Вот пример:
public class Clock extends EventDispatcher
{
protected var _tick:uint;
protected function run():void
{
if( _tick + 1 > 60 ) {
_tick = 0;
} else {
_tick++;
}
dispatchEvent( new Event( Event.CHANGE ) );
}
public function getTick():uint { return _tick; }
}
Иногда важно, чтобы внутренние детали объекта были доступны только для чтения.В случае вышеприведенного примера, когда вызывается метод run()
, класс Clock
выполняет некоторую внутреннюю логику и затем отправляет событие, указывающее, что что-то изменилось.Любой класс, который прослушивает это событие, может затем вызвать открытый метод getTick()
, чтобы узнать значение _tick
.Это скрывает реализацию и защищает переменную _tick
от изменения внешними классами и в то же время обеспечивает интерфейс, через который можно прочитать Clock
.