5

addListener ではなく、setListener メソッドを使用して登録された多くのリスナーがあります。したがって、複数のリスナーをオブジェクトに登録できるようにするには、マルチプレクサを使用する必要があります。これで問題ありませんが、ここで、使用しているすべてのリスナー インターフェイスに対してマルチプレクサを作成する必要があります。だから私の質問は: 次のコードに必要な Mux.create() を実装することは可能ですか?

AppleListener appleListener1 = new AppleProcessorA();
AppleListener appleListener2 = new AppleProcessorB();
AppleListener appleListenerMux = Mux.create(appleListener1, appleListener2);
Apple apple = new Apple();
apple.setListener(appleListenerMux);

OrangeListener orangeListener1 = new OrangeProcessorA();
OrangeListener orangeListener2 = new OrangeProcessorB();
OrangeListener orangeListenerMux = Mux.create(orangeListener1, orangeListener2);
Orange apple = new Orange();
orange.setListener(orangeListenerMux);

class Mux {
   public static <T> T create(T... outputs) { }
}

これは、リフレクションを使用して可能になる可能性があると思います。リフレクションを使用することが悪い考えになる理由はありますか? (性能は気になる)

4

3 に答える 3

0

あなたのソリューションは、「アダプター」と「ファクトリーメソッド」のデザインパターンを組み合わせたものだと思います。これらのパターンを Java で実装する方法については、以下の 2 つの便利なリンクを参照してください。

于 2013-04-08T07:00:20.487 に答える
0

複合パターンはあなたのケースに適しています。

AppleListener appleListener1 = new AppleProcessorA();
AppleListener appleListener2 = new AppleProcessorB();
CompositeListener composite = CompositeListener.for(appleListener1, appleListener2);
Apple apple = new Apple();
apple.setListener(composite);

AppleListener と OrangeListener をリファクタリングして、サブジェクトがリスナーに通知するためのメソッドを含む Listener インターフェースを実装する必要がある場合があります。CompositeListener も、このリスナーを拡張して複合パターンを実装する必要があります。

于 2013-04-08T09:18:08.527 に答える