我试图重构代码,并且遇到了这段代码。您能提出建议中的任何重构方法,请说出您使用的折射方法。
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"); } }
您实际上违反了SRP(单一职责原则),因此,每当添加新语言时,都需要触摸此代码库。
为了避免列出大量if else statements,您需要一个松散耦合的设计,其中addLetters()行为应在单独的LanguageImpl类(如英语等)中实现,如下面的代码所示,该代码使用状态模式:
if else statements
addLetters
LanguageImpl
步骤(1):定义Language界面
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对象的方法
setUpBag
public void setUpBag(Language language){ language.addLetters(); }
每个Language类都遵循SRP,这是设计OOP应用程序的关键,即每个语言类仅处理特定的行为。
您可以在这里查看更多详细信息。