我在辯論一個非常典型的問題的兩種方法:瞭解事件何時發生或立即響應,如果它已經發生。迴應可能已發生的事件
在方法一中,MyLoader1的用戶添加一個事件偵聽器,如果加載器已經完成,它將立即觸發。
class MyLoader1 extends EventDispatcher
{
private var _isComplete:Boolean = false;
public override function addEventListener(type:String, listener:Function, useCapture:Boolean=false, priority:int=0, useWeakReference:Boolean=false):void
{
super.addEventListener(type, listener, useCapture, priority, useWeakReference);
// if the operation is already complete, immediately notify listeners
if(_isComplete)
{
dispatchEvent(new Event(Event.COMPLETE));
}
}
}
class Application1()
{
function main():void
{
new MyLoader1().addEventListener(Event.COMPLETE, onComplete);
}
}
在方法2,MyLoader2的用戶必須首先決定是否繼續或增加一個監聽器,這就是後來發射前檢查MyLoader2的完成狀態。
class MyLoader2 extends EventDispatcher
{
private var _isComplete:Boolean = false;
public function get isComplete():void
{
return _isComplete;
}
}
class Application2()
{
function main():void
{
var loader:MyLoader2 = new MyLoader2();
if(loader.isComplete)
{
// passing null just to simplify the example
onComplete(null);
}
else
{
loader.addEventListener(Event.COMPLETE, onComplete);
}
}
}
每種方法都有哪些優點/缺點?在這種情況下,我可以/應該使用哪種設計模式?
我傾向於第一個,因爲它需要較少的Loader類知識和較少的代碼來利用它。當有多個偵聽器時,它可能會產生不希望的副作用,因爲每次添加偵聽器時,事件都會觸發一次。
第二種方法是可以理解的,並且更易於調試,但需要更多的前期工作,似乎打破了Loader的封裝。