Если абонент решает, что логика выполняется путем передачи различных строк, то почему бы не просто их называют различные методы:
public void doSomething(String actionID) {...}
...
doSomething("dance");
doSomething("sleep");
VS .:
public void dance() {...}
public void sleep() {...}
...
dance();
sleep();
Похоже, вы излишне утекают все звонки в doSomething
Но струны могут быть не всегда литералами. Что делать, если вы берете их с консоли?
Вы можете создать статические сопоставления из строк с соответствующими функциями:
class MyClass {
private static final Map<String, Consumer<MyClass>> map = new HashMap<>();
static {
map.put("sleep", MyClass::sleep);
map.put("dance", MyClass::dance);
}
public void doSomething(String actionID) {
map.getOrDefault(actionID, MyClass::doNothing).accept(this);
}
public void dance() {
System.out.print("I'm dancing");
}
public void sleep() {
System.out.print("I'm sleeping");
}
private void doNothing() {
System.out.println("I've no idea what I'm doing");
}
}
Это делает сценарии, в которых у вас есть много случаев переключателя намного чище.
Может быть, возможно, что вы ищете что-то вроде этого ? http://crunchify.com/why-and-for-what-should-i-use-enum-java-enum-examples/ –
Вы можете реализовать шаблон команды. –