我正在重构一个项目中的代码,遇到了一个大型 if/else if 语句,格式如下:
if (changer instanceof AppleChanger)
{
panel = new ApplePanel();
}
else if (changer instanceof OrangeChanger)
{
panel = new OrangePanel();
}
现在我的第一个冲动是使用多态进行重构,使其看起来像
panel = changer.getChangerPanel();
不幸的是,类包没有访问面板包的权限。
我的下一个冲动是创建一个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;
}
这是一个好的解决方案吗?还是有更好的方法来解决这个问题?