我正在学习设计模式,我很困惑,因为我不知道哪种模式最适合这种情况:
我有String,并且这个String可能很多种。它可以是“123abc”,“abc123”,“abcdfe”或“123456”,并且仅类似于那些字符串。
public void doSomething(String variousString) {
StringType type = checkType(variousString);
if(type==StringType.Mixed) doMixedAction();
if(type==StringType.OnlyLetters) doOnlyLetterAction();
if(type==StringType.OnlyDigits) doOnlyDigitsAction();
}
首先,我想到了策略模式,但我认为这里不匹配。现在,我认为责任链在这里非常匹配。
在这种情况下删除if语句的最佳模式是什么?您对此有何看法?
最佳答案
不是经典的设计模式,而是也可以使用简单的Map
public class Main {
private final Map<StringType, Runnable> bindings = new HashMap<>();
public Main() {
bindings.put(StringType.Mixed, () -> doMixedAction());
bindings.put(StringType.OnlyLetters, () -> doOnlyLetterAction());
bindings.put(StringType.OnlyDigits, () -> doOnlyDigitsAction());
}
public void doSomething(String variousString) {
bindings.getOrDefault(checkType(variousString), () -> {}).run();
}
}