削除されたオブジェクトを記録するデコレーターをブロックしました
-
04-10-2019 - |
質問
私は持っています BlockingQueue
プロデューサー消費者の状況で使用されている実装。このキューを飾り、それから取られているすべてのオブジェクトが記録されるようにしたいと思います。私は簡単な実装がどのように見えるかを知っています:単に実装する BlockingQueue
そして、受け入れます BlockingQueue
すべての方法が委任するコンストラクターで。私が足りない別の方法はありますか?おそらく図書館?コールバックインターフェイスがあるもの?
解決
あなたが考慮したい代替手段はです 動的プロキシ. 。これにより、特定のインターフェイスで作成されたリクエストを処理するためにリフレクションスタイルのAPIを使用できます。すべての呼び出しを基礎となる実装に委任するのは非常に簡単です。
このアプローチの欠点は、すべてのメソッド呼び出しに少し余分なオーバーヘッドを追加することです(パフォーマンスクリティカルなセクションで使用する場合、これは黄色のフラグである必要がありますが、ほぼ確実に一般的な使用については無視できます)。 。最終的にあなたがしていることは、各委任方法を明示的に記述する必要がないが、ある種のワイルドカードの実装を提供する必要がないことを除いて、投稿で説明する同じ動作を定義することです。
他のヒント
関連する実装クラスを拡張するクラスを作成する方が簡単だと思いました。 BlockingQueue
インターフェイス、そしてオーバーライドします remove
方法、および必要に応じてその他。
編集
OPが複数の実装を使用している場合、ラッパーを作成することはより良い実装です BlockingQueue
, 、しかし、それはわずかなパフォーマンスを導入します すべて 運用、およびその他の小さな問題。
私のポイントは、キュークラスを拡張することはそれをラッピングする代わりになるということです。それがより良い代替案であるかどうかは、状況に依存します。