6

たくさんのコントロールを備えたGUIアプリケーションがあります。それらの大部分にはイベントがあり、コントロールはそれぞれに論理的に接続されています。たとえば、5つのコンボボックスがあります。cb1cb3で何かを選択した場合、 cb2は使用可能な値のリストを変更する必要があります。cb2ch4で何かを選択した場合、cb5は使用可能な値のリストをロードする必要があります。私がウェブで見つけたすべての記事は、メディエーターパターンを使うべきだと言っていますこの場合。しかし、これらの記事のすべてにおいて、メディエーターは神のクラスのようなものであり、すべてのコントロールについてすべてを知っており、何らかのイベントが発生した場合に何をすべきかを決定します。私が5-6のコントロールを持っているなら-すべてが大丈夫です。しかし、20または40のコントロールのようなものがある場合はどうなりますか?この場合、メディエータークラスはモンスターになると思います。それを使って何かをするのは難しいでしょう(変更するか、新しい機能を追加する)。

この状況を解決するのに役立つ他のパターン、またはメディエーターパスの良い例はありますか?

PS:このトピックに関する既存の質問がある場合は申し訳ありません。同じ名前の質問が非常に多いため、これらすべてのトピックから本当に必要なものを見つけるのは簡単ではありません。

4

5 に答える 5

3

ここではメディエーターが確かに正しい選択ですが、ロジックを分離しておくことができるOBSERVERパターンを使用する代替オプションがあります。(cb2はcb1を観察し、適切に反応します。cb3-> cb2など)。

OBSERVERパターンでは、一度に2つのコントロールのみをリンクする必要があります。これはチェーンのようなものです。

于 2012-04-16T18:34:15.780 に答える
1

カスタムコンポーネント(JComponentまたはJPanelを拡張)に一緒に属するコンポーネントをグループ化してみてください。これらのカスタムコンポーネントは、子のイベントをリッスンし、必要に応じて他の子を更新します(->それらはメディエーターになります)。カスタムコンポーネントは、独自のカスタムイベントを発生させて、親メディエーターに通知することもできます。

于 2012-04-16T16:31:39.447 に答える
0

メディエーターパターン-Wiki

ウィキペディアからの場合ですが、それはシンプルで理解しやすいものです。

私がパターンを研究していたとき、このコードは最高のものでした。シンプルでありながら効率的...そしてあなたが説明していることにはそうです私はメディエーターパターンを使用します

于 2012-04-16T16:07:17.737 に答える
0

さまざまなアクションをストラテジーストラテジーパターンとして使用し、メディエーターから特定のストラテジーを呼び出します。これにより、明日コントローラーを追加する必要がある場合に、数行のコードを変更するだけで済みます。

于 2012-04-16T16:13:47.310 に答える
0

gof本は言う:

"...関連パターン

Facade(185)は、オブジェクトのサブシステムを抽象化してより便利なインターフェースを提供するという点でMediatorとは異なります。そのプロトコルは単方向です。つまり、Facadeオブジェクトはサブシステムクラスの要求を行いますが、その逆は行いません。対照的に、Mediatorは、同僚のオブジェクトが提供しない、または提供できない協調動作を可能にし、プロトコルは多方向です。

同僚は、オブザーバー(293)パターンを使用してメディエーターと通信できます。..."。

オブザーバーとメディエーターまたはファサードの組み合わせがうまく機能すると思います。

デザインパターンの特質の1つは、実装するたびに異なることを覚えておいてください。

于 2012-04-16T18:50:05.300 に答える