一尘不染

重构代码(如果不是)

java

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

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");
    }
}

阅读 204

收藏
2020-12-03

共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):修改setUpBagLanguage对象的方法

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

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

您可以在这里查看更多详细信息。

2020-12-03