我在我的課上有四個RichTable
實例,並且有一個current
表實例的概念。根據國旗resetAll
我需要清除所有表或所有表的選擇,除了當前的。如果resetAll
爲真,那麼清除所有內容,否則省略當前的內容。當前表的索引作爲參數傳遞給執行清理操作的方法。如何重構此代碼並應用OO模式?
呼籲清理出一切看起來是這樣的:
clearSubTypeSettings(true,-1);
呼籲清除所有,但目前的一個看起來是這樣的:
clearSubTypeSettings(true, col);
上述方法的實現是這樣的:
private void clearSubTypeSettings(boolean resetAll, int exceptControl) {
if (!resetAll) {
clearAllExceptCurrent(exceptControl);
} else {
clearAll();
}
}
現在這兩種方法clearAllExceptCurrent(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 clearAllExceptCurrent(int exceptControl) {
for (int i = 0; i < SUBTYPE_TABLES; i++)
if (i != exceptControl && getSubTypeTable(i).getSelectedRowKeys() != null) {
RichTable richTable = getSubTypeTable(i);
RowKeySet rowkeySet = richTable.getSelectedRowKeys();
rowkeySet.clear();
AdfFacesContext.getCurrentInstance().addPartialTarget(richTable);
}
}
我覺得我在這裏寫重複的冗餘代碼,並且將維護在今後的複雜化。我該如何改進這些代碼並使其更加面向對象?