Interaktive Benutzserschnittstelle

DerHelfer22

Mitglied
Hi,
ich muss in meiner Aufgabe verschiedene Befehle per Scanner einlesen und diese sollen dann ausgeführt werden. Ich möchte dabei das alles nicht mit String.startswith... in der Mainklasse machen. Gibt es eine Möglichkeit diese Befehle in einer eigenen Klasse zu schreiben und sie dort nach Fehlern zu untersuchen, wobei diese Klasse mit nur einem Befehl aus der MainKlasse ausgeführt wird? Habe zwar bisschen im Internet danach rumgesucht bin bisher aber nicht wirklich fündig geworden.
 

Joose

Top Contributor
Ob eine Befehlszeile (Befehl + Parameter + Optionen) richtig geschrieben wurde (von der Syntax her) kann man mal per Regex prüfen.
Aber irgendwo wirst du unterscheiden müssen um welchen Befehl es sich handelt usw.

Ich habe mal eine kleine Konsolenapplikation geschrieben um einen Server zu steuern. Dabei habe ich eine Klasse geschrieben welche sich um das Einlesen bzw die Ausgabe auf der Konsole kümmert (ConsoleHandler).
Außerdem eine Klasse "CommandInterpreter" und eine Klasse "CommandExecutor". Der Intepreter hatte ein string[] mit allen möglichen Befehlen. Per switch/case habe ich dann entschieden von welcher Command Klasse ich ein Objekt erstellt haben will (ich hatte eine abstrakte Basisklasse von welcher die unterschiedlichen Commands ableiten).

Heute würde ich es nicht großartig anders machen, einzig das ich zusätzlich zu den Strings noch den passenden Typen hinterlegen und eine Instanz der Klasse per Reflection erstellen würde. Damit man sich das switch/case spart.
 
K

kneitzel

Gast
Also da kann man schon einiges machen. Du könntest z.B. eine Basisklasse oder Interface erstellen, das hier die notwendigen Funktionen bereitstellt. Mögliche Funktionen könnten sein: String Usage() das einen String mit Beschreibung des Befehls zurück gibt. Ein Check oder Parse, das prüft, ob ein Befehl denn zu dem implementierten Befehl gehört (Also in dem dann z.B. mittels String.startsWith etwas geprüft wird). Und auch ein Execute oder so, so dass dann den Befehl ausführen würde. (Habe jetzt halt kein wirkliches Design erstellt - das ist nur so eine Idee.)

Dann müsste Deine Applikation nur noch eine Liste der bekannten Befehle haben. Ein Pattern, das es hier gibt, ist das sogenannte Dependency Injection. Das muss man aber auch nicht ganz so weit treiben und Du könntest einfach eine Instanz von allen Befehlen erzeugen oder so. Aber eine Idee wäre hier, dass man von aussen beliebige Befehl einfügen könnte.

Das nur als eine Möglichkeit, die mir jetzt so einfällt.
 

Ähnliche Java Themen

Neue Themen


Oben