Question

J'ai un BlockingQueue la mise en œuvre qui est utilisé dans une situation entre producteurs et consommateurs. Je voudrais décorer cette file d'attente afin que chaque objet qui est tiré de c'est connecté. Je sais ce que la mise en œuvre simple ressemblerait à ceci: tout simplement mettre en œuvre BlockingQueue et accepter un BlockingQueue dans le constructeur auquel toutes les méthodes il confierait. Y at-il une autre façon que je suis absent? Une bibliothèque peut-être? Quelque chose avec une interface de rappel?

Était-ce utile?

La solution

Une alternative que vous souhaitez peut-être considérer est la dynamique procurations . Cela vous permet d'utiliser une API de type de réflexion pour traiter les demandes faites sur une interface donnée - il serait très facile de déléguer tous les appels à une mise en œuvre sous-jacente, tout en ajoutant une certaine logique d'enregistrement si le nom de la méthode correspond à une des méthodes de prise.

L'inconvénient de cette approche est qu'il ajoute un peu de frais généraux supplémentaires à tous les appels de méthode (presque certainement négligeable pour un usage général que cela devrait être un drapeau jaune si elle est utilisée dans une section critique la performance), et le code peut se terminer jusqu'à la recherche lourde. En fin de compte ce que vous faites est de définir exactement le même comportement que vous décrivez dans votre poste, à moins que vous n'avez pas besoin d'écrire chaque méthode délégante explicitement, mais fournir une sorte de mise en œuvre des caractères génériques.

Autres conseils

J'aurais pensé qu'il serait plus simple de créer une classe qui étend la classe de mise en œuvre pertinente pour l'interface BlockingQueue et redéfinit la méthode remove, et d'autres au besoin.

EDIT

Création d'un emballage est une meilleure mise en œuvre si l'OP utilise plus d'une mise en œuvre de BlockingQueue, mais il introduit un succès petite performance sur tous opérations, et d'autres problèmes mineurs.

Mon point est que l'extension de la classe de files d'attente est une alternative à l'envelopper. Que ce soit une meilleure alternative dépend des circonstances.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top