J'ai essayé de trouver un moyen d'étiqueter plusieurs méthodes de ma classe de base, de sorte qu'une classe de client peut les appeler par balise. Le code exemple est:les méthodes de marquage et les appeler à partir d'un objet client par tag
public class Base {
public void method1(){
..change state of base class
}
public void method2(){
..change state of base class
}
public void method3(){
..change state of base class
}
}
Une classe de client à partir d'une méthode principale() appellera chaque méthode de base à travers une séquence d'instructions au hasard:
public static void main(String[] args) {
String sequence = "ABCAABBBABACCACC"
Base aBase = new Base();
for (int i = 0; i < sequence.length(); i++){
char temp = sequence.charAt(i);
switch(temp){
case 'A':{aBase.method1(); break;}
case 'B':{aBase.method2(); break;}
case 'C':{aBase.method3(); break;} }
}
System.out.println(aBase.getState());
}
Maintenant, je tiens à vous débarrasser de l'instruction switch tout à fait de l'objet Client. Je suis conscient de la technique pour remplacer le commutateur par le polymorphisme, mais souhaitez éviter créer un ensemble de nouvelles classes. J'espérais simplement stocker ces méthodes dans une structure de données appropriée et les marquer d'une manière ou d'une autre avec un caractère correspondant de la séquence. Une carte pourrait facilement stocker des objets avec des paires valeur/clé qui pourraient faire le travail, (comme je l'ai fait here), ou le modèle de commande, mais puisque je ne veux pas remplacer ces méthodes par des objets, y a-t-il un peut-être de façon différente, pour stocker les méthodes et demander à un client de les appeler de façon sélective?
Tout conseil est apprécié
@skaffman: Merci pour l'élaboration, son apparence est plutôt nette et droite – denchr
+ 1 pour la solution la plus simple, bien que je pense toujours que le fait d'abandonner le reflet et d'utiliser le motif de commande * serait préférable. –
Peut-être, mais j'en doute. La surcharge de réflexion est assez faible ces temps-ci, et elle est certainement assez rapide pour pratiquement tous les frameworks Java. – skaffman