J'ai une classe d'util qui effectue du travail. De toute évidence, il est fermé pour l'extension et toutes les méthodes sont statiques. Pour des raisons de simplicité, la classe ressemble à ceci: la classe a la méthode maintenant, dans Code client, je veux réutiliser la fonctionnalité de la méthode C'est une très mauvaise approche, car chaque changement Dans meilleure solution que j'ai proposée pour ajouter Paramètre sur cette méthode, mais conserve tous les utilisateurs existants de Quelles sont les meilleures solutions de conception peuvent être appliquées pour résoudre ce problème? Existe-t-il un moyen d'obtenir une flexibilité comme le modèle code> code> a, mais en application à des classes utiles. P> Merci d'avance. P> P> dowork code> qui effectue beaucoup de calculs. À propos, méthode appelle la méthode d'assistant
Aide CODE> pour obtenir un certain résultat et que le reste du code utilise le résultat renvoyé par
Aide code> méthode. P>
Dowork code>, mais au lieu d'appeler
Aide code> Je veux appeler
help2 code> méthode. La solution la plus simple vient de créer une méthode
dowork2 code> avec le remplacement de
Aide code> à
help2 code>. P>
Dowork code> doit être répliqué dans
Dowork2 Code> non plus. Ceci très similaire à la méthode de modèle code> code>, mais en raison du fait que nous n'avons pas d'extension ici, nous ne pouvons pas l'appliquer. P>
dowork code>: p>
3 Réponses :
Vous pouvez créer 2 objet statique help1 code> &
public static void doWorkWithParameter(Help h) {
int variable = h.help();
}
Pas si longtemps, j'ai fait ceci:
Helper.OLD.doWork(); Helper.NEW.doWork();
Cela vient d'un livre Java efficace - "Item 34: émuler des énums extensibles avec des interfaces"
Ma suggestion est inspirée dans le Modèle de commande , où Util Class est une invocataire et chaque dowork -Les paires de critères sont encapsulées à l'aide de l'interface de travailleur.
L'inteface travailleur pourrait être un peu comme p> la classe util p> Le travailleur concret (implémentations d'aide et de Dowork) p> un autre travailleur p> et l'exécution p>
Au lieu de l'interface de travailleur, vous feriez mieux de le faire comme une classe abstraite avec une méthode de Dowork (). C'est en fait la même chose que ce que je suggère, mais juste avec plus de code. Vous avez quatre cours au lieu d'un. Je suppose que Enums sont un meilleur remplacement de méthodes statiques.
Super! Il ressemble à un modèle de stratégie collections.sort (LST, comparateur) code>. Comment pourrais-je manquer ça?
Y a-t-il une raison pour laquelle vous n'utilisez pas la surcharge de la méthode dans votre solution?
Public Static Void Dowork () {...} Code>
Public statique Void Dowork (Boolean Param) {...} code>
Ou mieux encore
Public statique Void Dowork (Int Variable) Code>. Bien que je soupçonne que la réponse réelle est que la confusion est due à la statique et que les objets fourniraient une réponse plus propre - difficile à raconter avec les exemples abstraits cependant.
Ce que vous recherchez est le modèle de stratégie. Vérifiez la réponse de Arnaldo.