Kontynuując poprzednie pytania (here i here), zaimplementowałem podstawowy wzorzec poleceń, utworzyłem klasy poleceń i zakodowałem do interfejsu, więc kiedy jakieś polecenie jest używane, wywołuję execute()
metoda.kłopot z polimorfizmem pokonać te przełączniki/case statement
Jednak nadal nie jestem w stanie wstrząsnąć tymi stwierdzeniami: Czytam każdą postać z ciągu głównego/decyzji, który składa się z losowych, powtarzających się znaków A, B, C lub D, a następnie ja pobrać powiązaną implementację polecenia z mapy i wywołać jego metodę wykonywania.
Mój projekt był tak:
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);
Ale wtedy, gdy czytam każdą instrukcję, znowu muszę uciekać się do przypadku stwierdzenia:
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;}
Oczywiście, gdzieś po drodze udało mi aby pokonać przewagę polimorfizmu w stosunku do stwierdzeń dotyczących przypadku.
Czy to może być rodzaj struktury danych, którą wybrałem do przechowywania moich poleceń? Może to być bardzo trwała struktura danych, z której można po prostu pobrać te polecenia.
Inną rzeczą, która przychodzi na myśl, jest nazwa klucz/wartość, której użyłem w mojej mapie. W jaki sposób starałem się koncepcyjnie połączyć każde zapisane polecenie z powiązaną z nim instrukcją? tj. Wdrożenie polecenia "A" jest zapisywane na mapie za pomocą klawisza "A", aby mogło pasować do odpowiedniej instrukcji "A"? Wydaje mi się to jednak mało prawdopodobne.
Każda wskazówka lub dalsza porada dotycząca mojego następnego posunięcia w celu usunięcia tych stwierdzeń raz na zawsze zostanie wysoko oceniona. Wiele z góry dzięki
@skaffman: Przepraszamy. Udało mi się jakoś odczytać próbkę kodu, ale pominięto tekst powyżej i poniżej. – Dirk
+1 za odpowiedź "Cytuj" i rozwiń dalej. – KLE
@skaffman: Dzięki, bardzo elegancki asnwer. Nie mogę uwierzyć, że to przegapiłem! – denchr