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
,此条件始终为真
,因此实际上不存在