我试图重构代码,我遇到了这段代码.你能否在其中建议任何重构,请说明你使用的折射.
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");
}
}
Run Code Online (Sandbox Code Playgroud)
您实际上违反了SRP(单一责任原则),因此无论何时添加新语言,您都需要触摸此代码库.
为了避免大量的列表if else statements,你需要一个松散耦合的设计,其中addLetters()行为应该在一个单独的LanguageImpl类(如英语等)中实现,如下面的代码所示,它使用状态模式:
步骤(1):定义Language界面
public interface Language {
addLetters();
}
Run Code Online (Sandbox Code Playgroud)
步骤(2):定义Language实现
public English implements Language {
//implement addLetters() for English
}
//Implement other Language Classes as well in separate classes
Run Code Online (Sandbox Code Playgroud)
步骤(3):修改setUpBag获取Language对象的方法
public void setUpBag(Language language){
language.addLetters();
}
Run Code Online (Sandbox Code Playgroud)
每个Language类都遵循SRP,这是设计OOP应用程序的关键,即每个语言类只处理特定的行为.
您可以在此处查看更多详细信息.
| 归档时间: |
|
| 查看次数: |
258 次 |
| 最近记录: |