AS3中自定义事件发送发者的三种方法

在AS3中实现自定义事件发送者有多种方法,这几天第四次看黑羽的殿堂之路,顺势就写下了,其本质只有一个EventDispatcher。


AS3是面向对象的语言,面向对象思想解析如下图:


所以在这里我们也有多种方法来实现自定义事件发送类。

这里有三种:

1.通过继承来实现;

2.通过复合来实现;

3.通过实现接口来实现。

在AS3事件中有3个要素,如下图所示,我们现在要实现的是自定义一个EventDispatcher。


第一种方法:继承EventDispatcher来实现

package
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.EventDispatcher;
	
	/**
	 * ...
	 * @author aisajiajiao
	 * 使用继承来实现
	 */
	
	public class CustomEventDispatcherDemo extends Sprite
	{
	
		public function CustomEventDispatcherDemo()
		{
			var dispatcher:SampleEventDispatcher = new SampleEventDispatcher();
			//不推荐直接使用字符串表示事件类型,这里只是作为演示
			dispatcher.addEventListener("Custom",actionListener);
			dispatcher.dispatchEvent(new Event("Custom"));
		}
		
		private function actionListener(e:Event):void
		{
			trace("自定义事件发送类" + e);
		}
	}
}

import flash.events.Event;
import flash.events.EventDispatcher;

//继承
class SampleEventDispatcher extends EventDispatcher
{
	//这里可以写一些自己需要的代码
}

第二种方法:复合来实现

package
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.EventDispatcher;
	
	/**
	 * ...
	 * @author aisajiajiao
	 * 使用复合来实现
	 */
	
	public class CustomEventDispatcherDemo2 extends Sprite
	{
	
		public function CustomEventDispatcherDemo2()
		{
			var dispatcher:SampleEventDispatcher = new SampleEventDispatcher();
			
			//这里我们可以看出使用复合之后,该类就不能再看做EventDispatcher对象了
			dispatcher.getEventDispatcher().addEventListener("Custom",actionListener);
			dispatcher.getEventDispatcher().dispatchEvent(new Event("Custom"));
		}
		
		private function actionListener(e:Event):void
		{
			trace("自定义事件发送类" + e);
		}
	}
}

import flash.events.Event;
import flash.events.EventDispatcher;

class SampleEventDispatcher
{
	private var _dispatcher:EventDispatcher;
	
	public function SampleEventDispatcher()
	{
		_dispatcher = new EventDispatcher();
	}
	
	//get方法
	public function getEventDispatcher():EventDispatcher
	{
		return _dispatcher;
	}
}

第三种方法,实现IEventDispatcher接口。

package
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.EventDispatcher;
	
	/**
	 * ...
	 * @author aisajiajiao
	 * 使用IEventDispatcher接口
	 */
	
	public class CustomEventDispatcherDemo3 extends Sprite
	{
	
		public function CustomEventDispatcherDemo3()
		{
			var dispatcher:SampleEventDispatcher = new SampleEventDispatcher();
			
			//不推荐直接使用字符串表示事件类型,这里只是作为演示
			dispatcher.addEventListener("Custom",actionListener);
			dispatcher.dispatchEvent(new Event("Custom"));
		}
		
		private function actionListener(e:Event):void
		{
			trace("自定义事件发送类" + e);
		}
	}
}

import flash.events.Event;
import flash.events.EventDispatcher;
import flash.events.IEventDispatcher;

//这样灵活性非常大,可以在这里实现你想要的各种功能
class SampleEventDispatcher implements IEventDispatcher
{
	public var _dispatcher:EventDispatcher;
	
	public function SampleEventDispatcher()
	{
		_dispatcher = new EventDispatcher();
	}
	
	public function addEventListener(type:String,listener:Function,
					useCapture:Boolean = false,priority:int = 0,useWeakReference:Boolean = false):void
	{
		_dispatcher.addEventListener(type,listener,useCapture,priority,useWeakReference);
	}
	
	public function dispatchEvent(event:Event):Boolean
	{
		return _dispatcher.dispatchEvent(event);
	}
	
	public function hasEventListener(type:String):Boolean
	{
		return _dispatcher.hasEventListener(type);
	}
	
	//注意这里的参数个数是与addEventListener数目不同的,仅有3个
	public function removeEventListener(type:String,listener:Function,useCapture:Boolean = false):void
	{
		_dispatcher.removeEventListener(type,listener,useCapture);
	}
	
	public function willTrigger(type:String):Boolean
	{
		return _dispatcher.willTrigger(type);
	}
}

所有自定义事件最终的输出结果如下图:




  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值