0

buttonView(つまり単純なボタン)があるとしましょう。rootViewでクリックを登録するには、次のようにします。

一般的に最初のアプローチに従います:class RootView {var buttonView:ButtonView; .... buttonView.addEventListener(ButtonView.CLICK、buttonView_click); ...}

基本的なアプローチ(2番目のアプローチ)を次のように実行してみませんか?

class RootView 
{
   var buttonView:ButtonView ; 
   buttonView.setFunction( buttonView_click ) ;

}


class ButtonView()
{
    public function setFunction(  someFunction:Function)
    {
        viewFunctionArray_Arr.push( someFunction ) 
    }

    public function onClick()
    {
        // remove dispatchEvent from here , instead 

        for ( var i=0; i< viewFunctionArray_Arr.length; i++)
        {
            //calling the registered functions of all the views one by one
            viewFunctionArray_Arr[i] ( ) ; 
        }

    }


}

説明が「緩い結合」に関するものである場合、「最初のアプローチ」はどのように緩い結合であるのだろうか。結局のところ、最初のアプローチでは、それを必要とするビューでインスタンス「buttonView」を使用しているからです。したがって、rootViewはbuttonViewについて知る必要があります。ではない ?

4

1 に答える 1

0

Flash Playerを使用するaddEventListener()と、2番目のアプローチと非常によく似たことが行われます。

addEventListener()関数への参照を渡す代わりに使用する理由の1つは、潜在的なメモリリークを回避するためです。

addEventListener()いくつかのオプションのパラメータがあります。最後の1つは、弱参照を使用するように指定していますaddEventListener(MouseEvent.CLICK, eventHandler, false, 0, true)。弱参照は、オブジェクトがガベージコレクションされるのを妨げません。

物事をクリーンアップする必要があるオブジェクトが破棄される場合(つまり、イベントリスナーを削除する)、弱参照を使用すると、クリーンアップタスクの一部を軽減できます。

緩い結合に関しては、両方のアプローチは同じだと思います。あるケースでは、親オブジェクトは、子ビューがイベントをディスパッチすることを知る必要があります。もう1つは、親がイベント処理関数をビューに渡す必要があることを知っている必要があります。私の意見では、これらは両方とも緩く結合されており、他の場所で子ビューを使用することを妨げるものは何もありません。

于 2012-06-07T16:20:21.913 に答える