我试图重构代码,我遇到了这段代码。 你能否在其中建议任何重构,请说出你使用的折射。
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");
}
}
答案 0 :(得分:5)
您实际上违反了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了解详情。