Java 如何重构此代码并应用OO模式?

Java 如何重构此代码并应用OO模式?,java,oop,refactoring,Java,Oop,Refactoring,我的类中有四个RichTable实例,并且有一个currenttable实例的概念。根据标志resetAll,我需要清除所有表格或除当前表格以外的所有表格的选择。如果resetAll为真,则清除所有内容,否则忽略当前内容。当前表的索引作为参数传递给执行清理操作的方法 清理一切的呼吁如下所示: clearSubTypeSettings(true,-1); clearSubTypeSettings(true, col); 清除除当前之外的所有对象的调用如下所示: clearSubTypeSett

我的类中有四个
RichTable
实例,并且有一个
current
table实例的概念。根据标志
resetAll
,我需要清除所有表格或除当前表格以外的所有表格的选择。如果
resetAll
为真,则清除所有内容,否则忽略当前内容。当前表的索引作为参数传递给执行清理操作的方法

清理一切的呼吁如下所示:

clearSubTypeSettings(true,-1);
clearSubTypeSettings(true, col);
清除除当前之外的所有对象的调用如下所示:

clearSubTypeSettings(true,-1);
clearSubTypeSettings(true, col);
上述方法的实现如下所示:

private void clearSubTypeSettings(boolean resetAll, int exceptControl) {
    if (!resetAll) {
        clearAllExceptCurrent(exceptControl);
    } else {
        clearAll();
    }
 }
现在这两种方法
clearalExceptCurrent(exceptControl)
clearAll()
看起来几乎相同。以下是实现:

  private void clearAll() {
        for (int i = 0; i < SUBTYPE_TABLES; i++)
            if (getSubTypeTable(i).getSelectedRowKeys() != null) {
                RichTable richTable = getSubTypeTable(i);
                RowKeySet rowkeySet = richTable.getSelectedRowKeys();
                rowkeySet.clear();
                AdfFacesContext.getCurrentInstance().addPartialTarget(richTable);
            }
    }
private void clearAll(){
对于(int i=0;i

private void clearAllExceptCurrent(int exceptControl){
对于(int i=0;i

我觉得我在这里编写重复的冗余代码,这将使将来的维护变得复杂。如何改进此代码并使其更面向对象?

重复的大部分代码是清除表的位。那么:

private void clearTable(int id) {
    if (getSubTypeTable(i).getSelectedRowKeys() != null) {
        RichTable richTable = getSubTypeTable(i);
        RowKeySet rowkeySet = richTable.getSelectedRowKeys();
        rowkeySet.clear();
        AdfFacesContext.getCurrentInstance().addPartialTarget(richTable);
    }
}
然后:

private void clearAll(){
对于(int i=0;i

编辑:在
clearTable
中移动
if
语句重复的大部分代码是清除表的位。那么:

private void clearTable(int id) {
    if (getSubTypeTable(i).getSelectedRowKeys() != null) {
        RichTable richTable = getSubTypeTable(i);
        RowKeySet rowkeySet = richTable.getSelectedRowKeys();
        rowkeySet.clear();
        AdfFacesContext.getCurrentInstance().addPartialTarget(richTable);
    }
}
然后:

private void clearAll(){
对于(int i=0;i
编辑:将
if
语句移动到
clearTable

中,您可以让
clearAll()
将(=>OOP模式)委托给
clearalExceptCurrent()
(=>通过删除重复的代码来改进代码,使其更易于维护):

两种方法之间的唯一区别是条件
i!=
clearAllExceptCurrent()中的exceptControl
。通过传递
-1
这个条件总是
真的
,因此实际上是不存在的。

你可以让
clearAll()
将(=>OOP模式)委托给
clearAllExceptCurrent()
(=>通过删除重复的代码来改进代码,使其更易于维护):

两种方法之间的唯一区别是条件
i!=
clearAllExceptCurrent()中的exceptControl
。通过传递
-1
,此条件始终为
,因此实际上不存在