我正在学习设计模式,我很困惑,因为我不知道哪种模式最适合这种情况:

我有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();
    }
}

10-06 13:19