3 votes

Est-ce une mauvaise conception de déclarer une classe abstraite parce qu'elle n'a que des membres statiques ?

J'ai une classe dans mon projet qui est utilisée pour charger des ressources externes (à savoir, des images et des fichiers audio). Cette classe ne possède que quelques membres : des champs HashMap pour le stockage des ressources, et des champs getImage(reference) etc. pour récupérer les ressources.

À l'origine, j'ai mis en place le modèle de singleton Mais j'ai ensuite lu certaines critiques sur la page liée, et j'ai envisagé d'utiliser des membres statiques.

Longtemps après avoir heureusement décidé d'implémenter toutes les fonctionnalités de la classe de manière statique, je faisais un peu de nettoyage de code. En faisant cela, j'ai réalisé que rien ne m'empêchait d'instancier cette classe ResourceManager classe. Cela m'a conduit à la marquer avec le abstract mot-clé.

Je n'ai jamais utilisé abstract de cette manière auparavant ; je ne l'ai jamais appliqué de manière plus conventionnelle que pour un arbre d'héritage. J'ai essayé de chercher sur Google les utilisations et les mauvaises utilisations de abstract mais toutes les ressources que j'ai trouvées me semblaient soit peu fiables, soit ne déconseillaient pas l'utilisation de l'abstrait de cette manière :

Le tutoriel d'Oracle sur les classes et méthodes abstraites.
Un autre site qui traite du mot-clé.

Citation du deuxième lien : "Son but est de servir purement de parent de classes."

Ma nouvelle mise en œuvre est-elle conventionnelle, pardonnable ou tout simplement mauvaise ?

8voto

darijan Points 6139

Vous n'avez pas besoin de le rendre abstrait, il suffit de rendre le constructeur privé . Résumé indique aux développeurs que cette classe est destinée à être étendue, ce qui n'est pas le cas dans votre exemple.

private ResourceManager() {
}

3voto

jlordo Points 22012

Si j'étais vous, je cacherais le constructeur comme ceci :

private ResourceManager() {}

1voto

EJP Points 113412

Est-ce une mauvaise conception de déclarer une classe abstraite parce qu'elle n'a que des membres statiques ?

Oui.

Rendez-le final et fournissez-le uniquement avec un constructeur privé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X