次の問題のための洗練されたOOPソリューションを見つけようとしています。POJOが混在したコレクションの処理(各POJOごとに異なるハンドラを使用)
ここでは、各POJOがおそらく異なるクラスであるPOJOSイベントのコレクションがあるとします。 POJOクラス(またはタイプ)ごとに異なるルールを使用して、このコレクションを処理する必要があります。
POJOを適切なハンドラで装飾することはできません。なぜなら、私たちは世代を制御せず、そのコレクションをそのまま受け取りますからです。したがって、これに対する任意のメカニズムが同じトラップに分類されます。しかしながら、アイテム3はこの可能性を扱う。いくつかの可能な解決策、いくつかの非常に醜い、いくつかのよりエレガントなしかし複雑あり
:
- 明白な解決策、および醜いは、ハンドラにPOJOを渡すためにinstanceof演算子を使用しています。
- 1を少し改良すると、チェーンディスパッチャーを使用して責任の連鎖を使用して、新しいタイプに新しいディスパッチャーが必要になります。ただし、各ディスパッチャには依然としてinstanceOfが必要です。
- 各オブジェクトがハンドラへの参照を保持するPOJOSではなく、拡張オブジェクトを作成します。これは、POJOと私たちのプロセッサーの間の結合を作ります。
- 特定のイベントクラスにハンドラを登録し、イベントをハンドラにディスパッチするジェネリックス(実効javaと同様にTypesafeコンテナ)を使用するディスパッチャサービスを作成します(Javaでこれを正しく行う方法がわかります)。
4は最もエレガントですが、私にはもっと良いアイデアがあるのだろうかと思っていました。
符号化時に既存のイベントクラスをすべて知っています:-) 新しいクラスを追加するたびに、新しいハンドラを追加する必要があります。 – KarlP
+1。 "これは、コーディング時にすべての可能なイベントクラスの知識が必要です":基本的な要件の一部であるようです。 – Olivier
あなたがそれらのすべてを知らなくても、未処理のPOJOクラスを単にどこかに記録するデフォルトのハンドラを作成します。今あなたは欠けているものを知っています。 –