Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

I am about to implement a API for my TCP/IP server written in Java. Right now I

ID: 639541 • Letter: I

Question

I am about to implement a API for my TCP/IP server written in Java. Right now I have a temporary method that takes a String, executes a command based on the String and returns a String basically like the following.

public void communicate(BufferedReader in, PrintWriter out) {
    while(true) {
        out.println(handleCommand(in.readLine()));
    }
}

private String handleCommand(String command) {
    if (command.equals("command1") {
        // do stuff
        return "Command 1 executed";
    } else if (command.equals("command2") {
        // do some other stuff
        return "Command 2 executed";
    }
}
I really want to do something more extensible, smarter and stateful, so I could handle more complex and stateful commands and without the method/class getting bloated.

How would you start?

Suggestions, ideas, or links for further reading are very welcome.

Explanation / Answer

I'd suggest using an interface, such as:

interface Command {
public boolean doCommand();
}

enum CommandNames {
COMMAND1("COMMAND1"),
COMMAND2("COMMAND2");

// other enum stuff

// Gets a command based on a name
public static CommandNames getCommand(String name);
}
Usage:

Map<CommandNames, Command> commands;

private String handleCommand(String command) {
Command command = commands.get(CommandNames.getCommand(command));

command.handleCommand();
}
First draft, but it ought to at least give you some ideas.