2013-06-16 2 views
0

В классе я следующий выключатель случае:рефакторинг использования же включение случае многократного времени

switch(articleStep.getDeveloper()) { 
    case CENTRAL: 
     switch(articleStep.getArticleType()) { 
      case POSM: 
       //some code 
       break; 

      case PROMOTION_PACK: 
       //some code 
       break; 
     } 
     break; 

    case LOCAL: 
     //some code 
     break; 
} 

в нескольких методах. Среди них различаются только внутренние операции (//some code).

Существует ли какой-либо альтернативный способ, посредством которого я могу поместить коммутационный футляр только одним методом, и я вызову этот метод, передав операции как параметры, и он выполнит ту же работу?


Usage-1

switch(articleStep.getDeveloper()) { 
    case CENTRAL: 
     switch(articleStep.getArticleType()) { 
      case POSM: 
       centralPOSMArticle = new AddManageArticleInDTO<ManageCentralPOSMArticleInDTO>();     
       centralPOSMArticle.setManageArticle(new ManageCentralPOSMArticleInDTO()); 
       setMandetoryParameterToAddManageArticleInDTO(centralPOSMArticle); 
       break; 

      case PROMOTION_PACK: 
       centralPromotionPackArticle = new AddManageArticleInDTO<ManageCentralPromotionPackArticleInDTO>();     
       centralPromotionPackArticle.setManageArticle(new ManageCentralPromotionPackArticleInDTO()); 
       setMandetoryParameterToAddManageArticleInDTO(centralPromotionPackArticle); 
       break; 
     } 
     break; 

    case LOCAL: 

     break; 
} 

Usage-2

switch(articleStep.getDeveloper()) { 
    case CENTRAL: 
     switch(articleStep.getArticleType()) { 
      case POSM: 
       genericDTO = centralPOSMArticle.getManageArticle(); 
       break; 

      case PROMOTION_PACK: 
       genericDTO = centralPromotionPackArticle.getManageArticle(); 
       break; 
     } 

     break; 

    case LOCAL: 

     break; 
} 

Есть общее семь место, где я использовал этот тип выключателя случае.

+1

Зависит от того, что делает ваш '// какой-то код'. – fge

+0

@fge Я добавил два использования коммутационного футляра, см. Обновление. –

+0

В вашем примере, включает ли область «genericDTO» код вызова? – Bohemian

ответ

2

Вы найдете свою идею совершенно неработоспособной, но хорошим подходом было бы определить методы внутри вашего перечисления и полагаться на динамическую отправку, чтобы выполнять работу операторов switch.

+0

Благодарим вас за ответ. Не могли бы вы рассказать о «динамической отправке, чтобы выполнить работу ваших операторов коммутатора»? –

+0

Класс Enum не в моих руках. Я не могу добавить метод в этот Enum. –

+0

Ну, если это вне вашего контроля, то это не сработает. Отправка динамического метода - это в основном оператор switch для типа объекта. –

Смежные вопросы