4

BlockingQueueプロデューサーとコンシューマーの状況で使用されている実装があります。このキューから取得されたすべてのオブジェクトがログに記録されるように、このキューを装飾したいと思います。単純な実装がどのようになるかはわかっています。すべてのメソッドが委譲するコンストラクターでBlockingQueuea を実装して受け入れるだけです。BlockingQueue私が見逃している別の方法はありますか?もしかして図書館?コールバック インターフェイスを備えたものはありますか?

4

2 に答える 2

2

インターフェイスに関連する実装クラスを拡張し、必要に応じてメソッドやその他をBlockingQueueオーバーライドするクラスを作成する方が簡単だと思いました。remove

編集

OP が の複数の実装を使用している場合は、ラッパーを作成する方が適切な実装ですが、すべてのBlockingQueue操作でパフォーマンスがわずかに低下し、その他の小さな問題が発生します。

私の言いたいことは、キュー クラスを拡張することは、それをラップすることの代わりになるということです。それがより良い代替手段であるかどうかは、状況によって異なります。

于 2010-05-21T09:38:27.743 に答える
1

検討したい代替手段は動的プロキシです。これにより、特定のインターフェイスで行われたリクエストを処理するために、リフレクション スタイルの API を使用できます。メソッド名がテイク メソッドの 1 つと一致する場合は、いくつかのログ ロジックを追加しながら、すべての呼び出しを基になる実装に委譲するのは非常に簡単です。

このアプローチの欠点は、すべてのメソッド呼び出しに余分なオーバーヘッドが少し追加されることです (パフォーマンスが重要なセクションで使用される場合、これは黄色のフラグになるはずですが、一般的な使用ではほぼ確実に無視できます)。 . 最終的には、投稿で説明したのとまったく同じ動作を定義していますが、各委任メソッドを明示的に記述する必要はなく、一種のワイルドカード実装を提供する必要があります。

于 2010-05-21T13:18:35.490 に答える