2016-10-14 11 views
0

2つの "モジュール" PanelManagerPanelは可能な限り独立したいので、それらの間の通信にはeventsを使用します。このようにして、別のモジュールが実行されている場合に、モジュールを個別に実行することができます。リスナを設定または削除するだけでモジュールをプラグインまたはアンプラグできます。ファクトリとイベントでオブジェクトを作成するための多目的コンストラクタ

モジュールは、新しいパネルが必要なときはいつでもnewPanelイベントを送出し、newPanelCreatedイベントをリッスンします。

Panelモジュールは、newPanelイベントをリッスンし、新しいパネルを作成し、{detail}という新しいパネルでカスタムイベントをnewPanelCreatedにディスパッチします。

これを実現するには、Panelモジュールを2通りの方法で設計できます。最初はPanelFactoryクラスで、インスタンス化時にリスナーを設定し、Panelクラスのインスタンスを作成します。 2番目はPanelのコンストラクタにフラグを持つクラスなので、trueフラグでインスタンス化するとリスナが設定されますが、falseフラグを使用してインスタンス化すると、通常のPanelとして動作します。このようにして、同じクラスはファクトリパネルとして同時に動作します。

どのアプローチをお勧めしますか?これを達成するより良い方法はありますか?

答えて

0

私はコンストラクタのフラグパラメータを使用しません(結局、コンストラクタは副作用がないと想定されます)。また、別のファクトリクラスも使用しません。

代わりに、リスナーを初期化するPanelクラスでメソッドを作成します。 newPanelハンドラでは、コンストラクタを呼び出してからそのメソッドを呼び出します。
また、Panel.createWithListenersのような静的メソッドを作成してコンストラクタを呼び出し、リスナを設定します。これは、誤って同じメソッドに対してinitメソッドを複数回呼び出すことができないという利点があります。

または、すべてのイベントコードがPanelクラスとイベントバスの間の(唯一の)インターフェイスなので、メソッドを完全に削除して、newPanelイベントから直接リスナーを設定するだけで、1か所に配置する必要があります。

関連する問題