gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 00:02:43 25 4
gpt4 key购买 nike

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

清除所有内容的调用如下所示:

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);
}
}

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

最佳答案

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

private void clearAll() {
clearAllExceptCurrent(-1);
}

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

关于java - 如何重构此代码并应用 OO 模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14502797/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com