
Код AS3:
package classes
{
import flash.utils.flash_proxy;
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.events.IEventDispatcher;
import flash.utils.Proxy;
/**
* ...
* @author Scarbo
* используем композицию, чтобы пользоваться благами и событийной модели и прокси!
*/
public class CustomProxy extends Proxy implements IEventDispatcher
{
private var _dispatcher:EventDispatcher;
private var _data:Object;
public function CustomProxy()
{
super();
_dispatcher = new EventDispatcher();
_data = { };
}
/*вот тут, наследование*/
override flash_proxy function getProperty(name:*):*{
if(name in _data){
return _data[name];
}else{
return null;
}
}
override flash_proxy function setProperty(name:*, value:*):void {
_data[name] = value;
dispatchEvent(new Event(Event.CHANGE));
}
/* INTERFACE flash.events.IEventDispatcher */
/*а тут, композиция*/
public function dispatchEvent(event:Event):Boolean
{
return _dispatcher.dispatchEvent(event);
}
public function hasEventListener(type:String):Boolean
{
return _dispatcher.hasEventListener(type);
}
public function willTrigger(type:String):Boolean
{
return _dispatcher.willTrigger(type);
}
public function removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
{
_dispatcher.removeEventListener(type, listener, useCapture);
}
public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
{
_dispatcher.addEventListener(type, listener, useCapture, priority, useWeakReference);
}
}
}