BlockingQueue
プロデューサーとコンシューマーの状況で使用されている実装があります。このキューから取得されたすべてのオブジェクトがログに記録されるように、このキューを装飾したいと思います。単純な実装がどのようになるかはわかっています。すべてのメソッドが委譲するコンストラクターでBlockingQueue
a を実装して受け入れるだけです。BlockingQueue
私が見逃している別の方法はありますか?もしかして図書館?コールバック インターフェイスを備えたものはありますか?
2 に答える
インターフェイスに関連する実装クラスを拡張し、必要に応じてメソッドやその他をBlockingQueue
オーバーライドするクラスを作成する方が簡単だと思いました。remove
編集
OP が の複数の実装を使用している場合は、ラッパーを作成する方が適切な実装ですが、すべてのBlockingQueue
操作でパフォーマンスがわずかに低下し、その他の小さな問題が発生します。
私の言いたいことは、キュー クラスを拡張することは、それをラップすることの代わりになるということです。それがより良い代替手段であるかどうかは、状況によって異なります。
検討したい代替手段は動的プロキシです。これにより、特定のインターフェイスで行われたリクエストを処理するために、リフレクション スタイルの API を使用できます。メソッド名がテイク メソッドの 1 つと一致する場合は、いくつかのログ ロジックを追加しながら、すべての呼び出しを基になる実装に委譲するのは非常に簡単です。
このアプローチの欠点は、すべてのメソッド呼び出しに余分なオーバーヘッドが少し追加されることです (パフォーマンスが重要なセクションで使用される場合、これは黄色のフラグになるはずですが、一般的な使用ではほぼ確実に無視できます)。 . 最終的には、投稿で説明したのとまったく同じ動作を定義していますが、各委任メソッドを明示的に記述する必要はなく、一種のワイルドカード実装を提供する必要があります。