在Code下面,我写了为每个条件执行switch-case语句。 现在我想删除switch-case语句并应用一些设计模式来克服这个问题。 //主要迭代 - 对于每张工作表 for(Entry>> entry:testCaseSheetsDataMap.entrySet()){
String sheetNameKey = entry.getKey().trim();
String testCaseName = testCaseSheetMasterMap.get(sheetNameKey).trim();
List<Map<String, Object>> executableRowsList = new ArrayList<Map<String, Object>>();
executableRowsList = entry.getValue();
CitiMainAuxiliary auxiliary = new CitiMainAuxiliary();
switch (testCaseName) {
case "Anonymous Mode Log In":
auxiliary.runAllLogin(executableRowsList, testCaseName, Constants.ANONYMOUS);
break;
case "Login Mode":
auxiliary.runAllLogin(executableRowsList, testCaseName, Constants.LOGIN);
break;
case "Cookied Mode Login":
auxiliary.runAllLogin(executableRowsList, testCaseName, Constants.COOKIED);
break;
case "OBO Mode Login":
auxiliary.runAllLogin(executableRowsList, testCaseName, Constants.OBO);
break;
case "Anonymous Mode Megamenu":
auxiliary.runMegaMenu(executableRowsList, testCaseName, Constants.ANONYMOUS);
break;
case "Login Mode Megamenu":
auxiliary.runMegaMenu(executableRowsList, testCaseName, Constants.LOGIN);
break;
case "Cookied Mode Logon - Megamenu Check":
auxiliary.runMegaMenu(executableRowsList, testCaseName, Constants.COOKIED);
break;
case "OBO Logon - Megamenu Check":
auxiliary.runMegaMenu(executableRowsList, testCaseName, Constants.OBO);
break;
}
} // end-for testCaseSheetsDataMap
答案 0 :(得分:0)
在你的情况下,你可以写一个HashMap<string,Constants>
并运行类似的东西:
auxiliary.runMegaMenu(executableRowsList, testCaseName, map.get("Login Mode Megamenu"));
此外,您可以引入一个HashSet<string>()
来存储runMegaMenu
- 方法的所有字符串,然后您可以通过以下方式检查它:
if(set.contains(testCaseName)){
auxiliary.runMegaMenu(executableRowsList, testCaseName, map.get(testCaseName));
}else{
auxiliary.runAllLogin(executableRowsList, testCaseName, map.get(testCaseName));
}
但回到你的问题。通常可以通过多态来避免切换案例。我个人更喜欢策略模式,就像你的例子一样。
答案 1 :(得分:0)
如前所述,您可以使用polymorphism
和Strategy
模式。
例如,您可以创建Map<String, BiConsumer<CitiMainAuxiliary, List<Map<String, Object>>> strategies
并填充它
strategies.put("Anonymous Mode Log In", (aux, list)-> aux.runAllLogin(list,...))
之后,您可以使用而不是switch语句
strategy = strategies.get(testCaseName);
strategy.accept(...)
如果您不能使用Java 8,您可以创建一个接口并使用Map<String, YourInterface>
而不是BiConsumer的地图。也许使用接口的实现更好,因为在每个特定的类中,您可以初始化常量,例如COOKIED
或OBO