2017-11-08 2 views
0

코드 아래에 각 조건에 대해 switch-case 문을 실행하도록 작성했습니다. 이제 switch-case 문을 제거하고이 문제를 해결하기위한 디자인 패턴을 적용하려고합니다. // 주 반복 -에 대한 모든 시트 에 대해 (항목 >> 항목 : testCaseSheetsDataMap.entrySet는()) {귀하의 경우에는Java의 스위치 케이스 문에 대한 대안이 있습니까? 어떤 좋은 디자인 패턴? switch case 문을 피하는 방법

  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 
+1

바꾸기 조건부 다형성으로 바꾸기를 찾고 있기 때문에 인터페이스를 사용한 구현이 더 나은 것일 수 있습니다. – chrylis

+0

왜 '스위치'를 바꾸시겠습니까? 어떤 문제가 있습니까? – talex

+0

Excel에서 데이터를 읽으며 때로는 내 사례 문이 Excel에서 수정 된 경우 스위치 케이스가 작동하지 않습니다. 그 때문에 교체를 원한다. – Sunil

답변

0

당신은 HashMap<string,Constants>를 작성하고 같은 실행할 수 있습니다

auxiliary.runMegaMenu(executableRowsList, testCaseName, map.get("Login Mode Megamenu")); 

하고 runMegaMenu -methods과 당신이 그것을 다음과 같은 방법으로 확인할 수있는 것보다 모든 문자열을 저장하는 경우 추가로 당신은 HashSet<string>()을 소개 할 수 :

if(set.contains(testCaseName)){ 
    auxiliary.runMegaMenu(executableRowsList, testCaseName, map.get(testCaseName)); 
}else{ 
    auxiliary.runAllLogin(executableRowsList, testCaseName, map.get(testCaseName)); 
} 
,536을

그러나 질문에 다시. 스위치 케이스는 일반적으로 다형성으로 피할 수 있습니다. 예제와 같은 경우 개인적으로 전략 패턴을 선호합니다.

0

언급 한대로 polymorphismStrategy 패턴을 사용할 수 있습니다.

예를 들어, 당신은 자바 8을 사용할 수없는 경우 당신은 당신이 인터페이스 및 사용을 만들 수 있습니다 strategy = strategies.get(testCaseName); strategy.accept(...)

을 사용할 수 있습니다 Map<String, BiConsumer<CitiMainAuxiliary, List<Map<String, Object>>> strategies을 만드는 대신 스위치 문 그 후

strategies.put("Anonymous Mode Log In", (aux, list)-> aux.runAllLogin(list,...)) 

그것을 채울 수 있습니다 BiConsumer의지도 대신 Map<String, YourInterface>. 어쩌면 모든 특정 클래스에서 상수를 초기화 할 수 있기 때문에 (예 : COOKIED 또는 OBO)

관련 문제