我正在重构我正在处理的项目中的一些代码,并且遇到了一个跟随格式的大型if/else if语句:
if (changer instanceof AppleChanger)
{
panel = new ApplePanel();
}
else if (changer instanceof OrangeChanger)
{
panel = new OrangePanel();
}
Run Code Online (Sandbox Code Playgroud)
现在我的第一个冲动是使用多态来重构它以使它看起来像
panel = changer.getChangerPanel();
Run Code Online (Sandbox Code Playgroud)
但遗憾的是,类包无法访问面板包.
我的下一个冲动是创建一个带有重载方法的PanelChooser类:
PanelChooser.getPanel(changer);
//Overloaded Method
public Panel getPanel(OrangeChanger changer)
{
Panel orangePanel = new OrangePanel();
return orangePanel;
}
public Panel getPanel(AppleChanger changer)
{
Panel applePanel = new ApplePanel();
return applePanel;
}
Run Code Online (Sandbox Code Playgroud)
这是一个很好的解决方案还是有更好的解决方法?