Delegate используется в силу того, что многие объекты во Flash 8 (и ниже) не являются вещателями, т.е. невозможно подписаться на события объекта.
Есть некий класс, который занимается обработкой данных, полученных из XML. Обработка — задача именно этого класса, а не объекта XML (как раз то, о чём пишет miramax). Поэтому, т.к. подписаться на onLoad нельзя, используется перенаправление вызова данного метода в метод нашего класса, т.е. как бы подписка на события.
У меня есть класс AbstractXML, который является вещателем, вот как он выглядит:

Код:
import mx.events.EventDispatcher;
/**
* @author Denis Kolyako
*/
class ru.etcs.data.AbstractXML extends XML {
private var __xml_url:String;
public var event:String = 'onXMLLoad';
public var errorEvent:String = 'onXMLLoadError';
public var idMap:Object;
private var dispatchEvent:Function;
public var addEventListener:Function;
public var removeEventListener:Function;
public function AbstractXML(xml_url:String) {
super("");
this.ignoreWhite = true;
EventDispatcher.initialize(this);
this.__xml_url = xml_url;
this.load(this.__xml_url);
}
private function onLoad(ok:Boolean):Void {
if (!ok || !this.loaded || this.status || this.getBytesTotal()<30) {
trace('XML loaded: '+this.loaded+', valid: '+this.status);
this.dispatchEvent({type:this.errorEvent});
return;
}
this.prepareData();
this.dispatchEvent({type:this.event});
}
private function prepareData():Void {
// For override
}
}
И у меня нет необходимости перенаправлять вызовы, я просто подписываюсь на события (имена которых, для удобства, можно изменить).