我正在重构一些旧的Java代码,我想知道是否有更好的方法来重构以下代码
private void createControlPanel() {
int row = 0;
row = initSessionControls(controlPanelGB, row);
row = initBidControls(controlPanelGB, row);
row = initSnapshotControls(controlPanelGB, row);
}
行在每种方法中都会递增。在我看来,这很丑。我也不想执行以下操作
private void createControlPanel() {
row = initSessionControls(controlPanelGB, 1);
row = initBidControls(controlPanelGB, 2);
row = initSnapshotControls(controlPanelGB, 3);
}
关于如何最好地重构它的任何建议?我正在使用Java 8。
答案 0 :(得分:1)
我建议使用ControlPanelFiller
类:
class ControlPanelFiller {
private final ... controlPanel;
private int row = 0;
public ControlPanelFiller(... controlPanel) {
this.controlPanel = controlPanel;
}
public ControlPanelFiller initSessionControls() {
...
++row;
return this;
}
public ControlPanelFiller initBidControls() {
...
++row;
return this;
}
public ControlPanelFiller initSnapshotControls() {
...
++row;
return this;
}
}
private void createControlPanel()
{
ControlPanelFiller cpf = new ControlPannelFiller(controlPanelGB);
cpf.initSessionControls()
.initBidControls()
.initSnapshotControls();
}
答案 1 :(得分:1)
您可以尝试以下代码
private void createControlPanel() {
int row =0;
row += initSessionControls(controlPanelGB);
row += initBidControls(controlPanelGB);
row += initSnapshotControls(controlPanelGB);
}
答案 2 :(得分:0)
您对这个代码感到不舒服是正确的。似乎每个被调用的方法都知道要处理的下一行是什么,因此它们紧密耦合,并且用于确定下一行的逻辑分布在多个方法中。嗯如果下一行确实比前一行大1,则最好在createControlPanel
方法中集中此逻辑:
private void createControlPanel() {
int initialRow = 0;
initSessionControls(controlPanelGB, initialRow);
initBidControls(controlPanelGB, initialRow+1);
initSnapshotControls(controlPanelGB, initialRow+2);
}
这比上面的第二个解决方案更清楚,因为很明显第二个参数是一行,以及它与初始行值的关系。