Question

J'ai un grand nombre d'objets qui sont identifiés par des noms (chaînes). Donc, je voudrais avoir une sorte de cartographie du nom de l'objet aux instances de classe.

On m'a dit que, dans cette situation, je peux utiliser une classe « référentiel » qui fonctionne comme ça:

Server myServer = ServerRepository.getServer("NameOfServer");

Donc, s'il y a déjà un objet (serveur) avec le « Nom_serveur » il sera renvoyé par le « GetServer ». Si un tel objet n'existe pas encore, il sera créé et renvoyé par le « GetServer ».

Alors, ma question est de savoir comment programmer une telle classe « référentiel »? Dans cette classe, je dois être en mesure de vérifier s'il y a une instance d'une classe donnée telle qu'elle a une valeur donnée d'un champ donné. Comment puis-je le faire? Je dois avoir une sorte de boucle sur tout objet existant d'une classe donnée?

Une autre partie de ma question est pourquoi je ne peux pas utiliser des tableaux associatifs (conteneur associatif, carte, cartographie, dictionnaire, carte finie)? (Je ne sais pas comment appelez-vous en Java) dans plus de détails, j'ai un « tableau » qui associe les noms d'objets à des objets. Donc, chaque fois que je crée un nouvel objet, ajouter un nouvel élément au tableau:. myArray["NameOfServer"] = new Server("NameOfServer")

Était-ce utile?

La solution

J'implémenteriez avec moi-même un récipient associatif, mais il est préférable de cacher les détails de mise en œuvre derrière une interface appropriée. Cela le rend plus facile à utiliser pour les clients, et plus facile pour vous de changer / finetune la mise en œuvre au fil du temps.

Par exemple, vous pouvez commencer par un simple HashMap et découvrir plus tard que pour une raison quelconque, un TreeMap serait mieux. Ou vous vous rendez compte qu'au fil du temps, beaucoup d'objets inutilisés accumulent dans la carte, qui ne sont pas référencés par quelqu'un d'autre, mais ne peut plus être parce que la collecte des ordures carte conserve une référence à leur disposition. Ainsi, vous pouvez décider de passer à un WeakHashMap. Si votre implémentation est caché derrière une interface, vous pouvez faire ces changements sans affecter les clients.

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