在我的代码中,我有一个if-else阻塞条件,如下所示:
public String method (Info info) {
if (info.isSomeBooleanCondition) {
return "someString";
}
else if (info.isSomeOtherCondition) {
return "someOtherString";
}
else if (info.anotherCondition) {
return "anotherStringAgain";
}
else if (lastCondition) {
return "string ...";
}
else return "lastButNotLeastString";
}
每个条件分支都返回一个String。
由于if-else语句难以阅读,测试和维护,我该如何替换? 我在考虑使用Chain of Responsability Pattern,在这种情况下是否正确? 有没有其他优雅的方式可以做到这一点?
答案 0 :(得分:0)
我只是将return
s:
return
info.isSomeBooleanCondition ? "someString" :
info.isSomeOtherCondition ? "someOtherString" :
info.anotherCondition ? "anotherStringAgain" :
lastCondition ? "string ..." :
"lastButNotLeastString"
;
答案 1 :(得分:0)
根据有关问题的有限信息和给出的代码,它看起来像是一种类型切换的情况。默认解决方案是使用继承:
class Info {
public abstract String method();
};
class BooleanCondition extends Info {
public String method() {
return "something";
};
class SomeOther extends Info {
public String getString() {
return "somethingElse";
};
在这种情况下有趣的模式是装饰器,策略和模板方法。责任链还有另一个重点。链中的每个元素都实现逻辑来处理一些命令。链接时,如果命令无法处理,则对象会转发该命令。这实现了一个松散耦合的结构来处理不需要集中调度的命令。
如果在条件上计算字符串是一个操作,并且从类的名称我猜它可能是表达式树,你应该看看访问者模式。