2

短い質問

すべてのコンポーネントに対して1つのリスナーインスタンスを作成すること、または各コンポーネントに対してインスタンスを作成することについて、適切な推奨事項があるかどうかを知りたいです。

拡張質問

私はJavaSwingアプリケーションを開発しています。

同じ形式で、同じリスナークラスを使用する多数のコンポーネント(それらの間に関係はありません)を持つことができます。私は各リスナーをそれぞれのクラスで作成します。

リスナーは、コンポーネントに導入されたデータに対していくつかの検証を行うために使用されます。

コンポーネントごとにリスナークラスのインスタンスを作成する必要がありますか、それともすべてのコンポーネントにリスナーの同じインスタンスを使用する必要があります。

このコメントを除いて、これに関する良い実践の提案を見つけることができません。それは参照を指していません。

4

4 に答える 4

3

の特定のケースではActionListener、を使用して目的の機能をカプセル化しますAction。Swing全体でこのクラスが広く使用されていることは、その価値を示唆しています。この簡単なは、いくつかの組み込みのテキストコンポーネントアクションを示しています。このより複雑なは、メニューとツールバー間でアクションを共有する方法を示しています。

代替案はif-then-else、イベントソースに基づいて成長し続けて維持するのが難しいはしごです。

補遺:ああ、私はあなたの質問を読み間違えました。@Andrewのコメントクラスに関するものです; あなたの質問はインスタンスについて尋ねます。前者の場合、単一のリスナーは既知のアンチパターンに向かって進化する傾向があります。引用されたの以前のバージョンは、問題を示しています。後者の場合、必要な数のインスタンスのみを使用してください。私は通常、プロファイラーを介した旅行で最もひどい違反を見つけます。

于 2012-09-03T20:22:00.383 に答える
2

最善の解決策は、コードを可能な限りクリーンにすることだと思います。

基本的に、単一のインスタンスが1つでもコードがそれほど複雑にならない場合は、インスタンスを1つだけ作成して、コンポーネント間で共有できます。それ以外の場合は、複数のインスタンスを持つことができます。

于 2012-09-03T17:43:19.430 に答える
1

コードを読みやすく、保守しやすいものを選択する必要があります。

インスタンスを作成する方が簡単な場合は、先に進んで実行しますが、動作は同じままなので、単一のインスタンスが機能するはずだと思います。

于 2012-09-03T17:43:16.987 に答える
1

あなたのアイデアは本当に面白いです........

そのスイングの場合は移動....それからすでにMVCアーキテクチャに基づいています......

Model -ビジネスロジックとデータ

View -出力の表現

Controller -アクションが実行される場所。

Business Logic with its data togetherロジックとそれに対応するデータを簡単に関連付けることができるように、を持っている方が良いと思います。

次のような、共通のEventSourceの共通のリスナーを常に持つことができます...JButton

あなたは異なる仕事JButtonをする4つを持つことができます、今あなたはステートメントを持つ単一のもの を持つことができます.....非常に扱いやすい......ActionListenerswitch

于 2012-09-03T17:47:41.847 に答える