我有将sql查询作为字符串返回的方法。这种方法考虑参数' level' ,基于此 参数有多个if else语句,如
if(level.equals("A1")){
// add some field in query
}
else if (level.equals("A2"))
{
// add some field and logic in query
}
..
so on
在未来的级别数量会增加,我不想编写讨厌的if语句,所以我正在为这种情况寻找更清晰,可维护的设计方法。 我在考虑策略设计模式,但不确定它是否最适合这种情况。
答案 0 :(得分:2)
您有几种选择:
A = [1,2,3,4]
/ if
,如您所示。
一个else if
,其中的键是级别字符串,值是功能接口类型(Map
或来自java.util.function
的适当接口或您自己的接口)的引用您可以根据需要使用method references,lambdas,匿名类实例或甚至具体的类实例进行初始化。
这是最后一个选项的示例,使用最基本的功能界面Runnable
和方法参考:
Runnable
答案 1 :(得分:0)
您可以使用enum
列出操作并使用valueOf
来确定要使用的内容。
enum Levels {
A1 {
@Override
void doSomethingToTheQuery(Query q) {
// add some field in query
}
},
A2{
@Override
void doSomethingToTheQuery(Query q) {
// add some field and logic in query
}
};
abstract void doSomethingToTheQuery(Query q);
}
public void test() {
// Lookup the level and do hack the query.
Levels.valueOf("A1").doSomethingToTheQuery(q);
}
然后,只需添加enum
即可添加新关卡。