多くの if は、これをもっとうまくやることができると常に言っています。あなたの場合、より良いオプションは、責任の連鎖などの設計パターンを使用することです。動的に変更できる優れた実装があり、ifs 実装よりもコードの保守が容易になります。
あなたのケースに対する責任のこの適応チェーンを見てください:
主要:
public static void main(String[] args) {
ClassA classA = new ClassA(Arrays.asList("abc", "ghi"));
ClassB classB = new ClassB(Arrays.asList("def"));
classA.setNextInChain(classB); // you can always write Builder to do this
String input = "def";
classA.execute(input);
}
ベースクラス:
public abstract class BaseClass {
private Collection<String> patterns = Collections.EMPTY_LIST;
protected BaseClass nextInChain;
protected abstract void doMethod(); // your doA, doB methods
public void execute(String input) {
// this replace many ifs in your previous implementation
if (patterns.contains(input)) {
doMethod();
} else {
nextInChain.execute(input);
}
}
public void setPatterns(Collection<String> patterns) {
this.patterns = patterns;
}
public void setNextInChain(BaseClass nextInChain) {
this.nextInChain = nextInChain;
}
}
チェーン内のクラス:
public class ClassA extends BaseClass {
ClassA(Collection<String> patterns) {
setPatterns(patterns);
}
@Override
protected void doMethod() {
// do A
}
}
public class ClassB extends BaseClass {...}