Pregunta

Tengo un BlockingQueue aplicación que está siendo utilizado en una situación productor-consumidor. Me gustaría decorar esta cola de manera que cada objeto que se toma de ella se registra. Yo sé lo que la implementación directa se vería así: simplemente aplicar BlockingQueue y aceptar un BlockingQueue en el constructor al que todos los métodos delegaría. ¿Hay otra manera que me falta? Una biblioteca tal vez? Algo con una interfaz de devolución de llamada?

¿Fue útil?

Solución

Una alternativa que podría considerar es dinámico proxies . Esto le permite utilizar una API al estilo de reflexión con el fin de procesar las solicitudes hechas en una interfaz determinada - que sería muy sencillo para delegar todas las llamadas a una implementación subyacente, al tiempo que añade un poco de lógica de registro si el nombre del método corresponde a uno de los métodos para llevar.

La desventaja de este enfoque es que se añade un poco de sobrecarga adicional a todas las llamadas de método (casi con toda seguridad insignificante para uso general, sin embargo esto debe ser una bandera amarilla si se utiliza en una sección de rendimiento crítico), y el código puede terminar encima de parecer engorroso. En última instancia lo que está haciendo es definir exactamente el mismo comportamiento que usted describe en su puesto, excepto que no es necesario escribir cada método de delegación explícita pero proporcionan una especie de comodín aplicación.

Otros consejos

Me habría pensado que sería más sencillo para crear una clase que amplíe la clase de implementación relevante para la interfaz BlockingQueue, y anula el método remove, y otros según sea necesario.

Editar

Creación de un envoltorio es una mejor aplicación si el PO está utilizando más de una implementación de BlockingQueue, pero introduce un pequeño impacto en el rendimiento de todos operaciones, y otras cuestiones de menor importancia.

Mi punto es que la ampliación de la clase de cola es una alternativa a envolverlo. Si se trata de una alternativa mejor depende de las circunstancias.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top