Continuando su domande precedenti (here e here), ho implementato un modello di comando di base, creato le mie classi di comando e codificato su un'interfaccia, quindi quando viene usato un comando, per chiamare il Metodo execute()
.problemi nel rendere il polimorfismo sconfiggere quelle istruzioni switch/case
Tuttavia, mi sto ancora ritrovando incapace di scuotere quelle dichiarazioni di caso: sto leggendo ogni personaggio da una stringa principale/decisione, che è composta da caratteri casuali, ripetuti A, B, C o D, e poi I recupera l'implementazione relativa del comando da una mappa e chiama il suo metodo di esecuzione.
Il mio progetto era come questo:
public interface Command {
void execute();
}
public class CommandA implements Command{
//implements execute() method
}
private Map myMap= new HashMap();
myMap.put("A", new CommandA);
myMap.put("B", new CommandB);
myMap.put("C", new CommandC);
myMap.put("D", new CommandD);
Ma, poi quando ho letto ogni istruzione, ancora una volta devo ricorrere a caso dichiarazioni:
switch(instructionFromString){
case 'A':{myMap.get("A").execute(); break;}
case 'B':{myMap.get("B").execute(); break;}
case 'C':{myMap.get("C").execute(); break;}
case 'D':{myMap.get("D").execute(); break;}
Ovviamente, da qualche parte lungo la strada sono riuscito per sconfiggere il vantaggio del polimorfismo contro le dichiarazioni del caso.
Potrebbe essere il tipo di struttura dati che ho selezionato per memorizzare i miei comandi? Può benissimo essere una struttura dati permanente da cui estrarre solo quei comandi.
Un'altra cosa che mi viene in mente è la denominazione chiave/valore che ho usato nella mia mappa. Il modo in cui ho provato a collegare concettualmente ogni comando memorizzato alle istruzioni associate? cioè l'implementazione del comando "A", è memorizzata sulla mappa con il tasto "A" in modo che possa corrispondere all'istruzione corrispondente "A"? Questo mi sembra un po 'improbabile.
Qualsiasi suggerimento o ulteriore consiglio sulla mia prossima mossa per rimuovere quelle dichiarazioni di caso una volta per tutte sarebbe molto apprezzato. Molte grazie in anticipo
@skaffman: Siamo spiacenti. Sono riuscito in qualche modo a leggere il codice di esempio, ma ho perso il testo sopra e sotto di esso. – Dirk
+1 per risposta I "citare" ed espandere. – KLE
@skaffman: Grazie, abbastanza elegante asnwer. Non posso credere di averlo perso! – denchr