[英]Design approach for multiple if else statement?
我有將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
/ else if
如您所指示。
一個switch
語句 。
可以使用方法引用 , lambdas ,匿名類實例或java.util.function
初始化的Map
,其鍵為級別字符串,值為功能接口類型( Runnable
或java.util.function
的適當接口,或您自己的接口)的引用甚至需要的具體類實例。
這是最后一個選項的示例,該示例使用最基本的功能接口Runnable
以及方法引用:
import java.util.Map;
import java.util.HashMap;
public class Example {
private Map<String, Runnable> handlers;
public Example() {
this.handlers = new HashMap<String, Runnable>();
this.handlers.put("A1", this::a1action);
this.handlers.put("A2", this::a2action);
}
private void a1action() {
System.out.println("Action A1");
}
private void a2action() {
System.out.println("Action A2");
}
public void handleAction(String action) {
Runnable handler = this.handlers.get(action);
if (handler == null) {
System.out.println("No handler for '" + action + "'");
} else {
handler.run();
}
}
public static void main(String[] args) throws Exception {
Example ex = new Example();
ex.handleAction("A1");
ex.handleAction("A2");
ex.handleAction("A3");
}
}
您可以使用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
即可添加新級別。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.