Ho cercato di capire un modo per etichettare diversi metodi dalla mia classe base, in modo che una classe client possa chiamarli per tag. Il codice di esempio è:metodi di codifica e chiamarli da un oggetto client per 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
}
}
Una classe client da un metodo main() chiamerà ogni metodo di base attraverso una sequenza di istruzioni casuale:
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());
}
Ora desidero sbarazzarsi della istruzione switch del tutto dall'oggetto Client. Sono a conoscenza della tecnica per sostituire lo switch con il polimorfismo, ma vorrei evitare creando un set di nuove classi. Speravo di memorizzare semplicemente quei metodi in una struttura dati appropriata e in qualche modo taggarli con un carattere corrispondente dalla sequenza.
Una mappa potrebbe facilmente memorizzare oggetti con coppie valore/chiave che potrebbero svolgere il lavoro, (come ho fatto io here) o il modello di comando, ma poiché non voglio sostituire questi metodi con gli oggetti, c'è un forse in modo diverso, per memorizzare metodi e farli chiamare in modo selettivo da un cliente?
Ogni consiglio è apprezzato
@skaffman: Grazie per l'elaborazione, il suo aspetto è abbastanza semplice e diretto – denchr
+1 per la soluzione più semplice, anche se continuo a pensare di abbandonare il riflesso in testa e usare il * schema di comando * sarebbe preferibile. –
Forse, ma ne dubito. L'overhead di riflessione è piuttosto ridotto al giorno d'oggi, ed è certamente abbastanza veloce per quasi tutti i framework java disponibili. – skaffman