多次重新考虑相同开关箱的使用情况

时间:2013-06-16 12:40:32

标签: java refactoring switch-statement

在课程中,我有以下开关案例:

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)。

是否有任何替代方法可以将switch-case放在一个方法中,我将通过将操作作为参数传递来调用该方法,它将执行相同的工作?


使用-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;
}

用法-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 个答案:

答案 0 :(得分:2)

您会发现您的想法非常不可行,但一个好的方法是在枚举中定义方法并依靠动态调度来完成switch语句的工作。