【问题标题】:Refactoring the Code (If else )重构代码(If else)
【发布时间】:2016-11-06 17:06:22
【问题描述】:

我试图重构代码并且遇到了这段代码。 您能否建议其中的任何重构,并请说出您使用的重构。

private void setUpBag(String language){
    if(language.equals("english")){
        /* add letters with English distribution to bag */
    }
    else if(language.equals("french")){
        /* add letters with French distribution to bag */
    }
    else if(language.equals("russian")){
        /* add letters with Russian distribution to bag */
    }
    else{
        throw new IllegalArgumentException("Unknown language");
    }
}

【问题讨论】:

  • 除了使用switch语句代替if-else之外,没有太大的改进空间。但是顺便说一句,上面的代码有什么问题?
  • 没有问题,但我只是发现对于每种新语言我都必须添加一个 else if 语句,所以我想知道是否有任何方法可以重构它。

标签: java refactoring


【解决方案1】:

您实际上违反了 SRP(单一职责原则),因此无论何时添加新语言,您都需要接触此代码库。

为了避免if else statements 的大量列表,您需要一个松散耦合的设计,其中addLetters() 行为应该在一个单独的LanguageImpl 类(如英语等)中实现,如下面的代码,它使用状态模式:

步骤(1):定义Language接口

    public interface Language {
      addLetters();
    }

步骤 (2):定义 Language 实现

    public English implements Language {
      //implement addLetters() for English
    }

    //Implement other Language Classes as well in separate classes

步骤(3):修改setUpBag方法,该方法采用Language对象

    public void setUpBag(Language language){
        language.addLetters();
    }

每个Language 类都遵循此处的 SRP,这是设计 OOP 应用程序的关键,即每个语言类仅处理特定行为。

您可以查看here了解更多详情。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-11
相关资源
最近更新 更多