【发布时间】:2019-11-11 07:22:48
【问题描述】:
我正在用 Java 编写代码来启用不同的组件。每个组件都需要满足一组特定条件才能启用。每个条件基本上都是一个执行一些逻辑并返回布尔值的方法。目前,我编写了一个代码,其中有一个不同的方法来为每个组件执行启用逻辑,并且相应的方法执行条件操作以返回布尔值。 我当前启用不同组件的实现如下所示:
private boolean shouldEnableComponent1() {
String param1 = getParam1();
String param2 = getParam2();
String param3 = getParam3();
if(checkCondition1(param1) && checkCondition2(param2) && checkCondition3(param3) {
return true;
} else {
return false;
}
}
private boolean shouldEnableComponent2() {
String param1 = getParam1();
String param2 = getParam2();
String param4 = getParam4();
if(checkCondition1(param1) && checkCondition2(param2) && checkCondition4(param4) {
return true;
} else {
return false;
}
}
请注意,不同的 shouldEnableComponentN() 方法可能必须调用相同的条件方法,例如在上述情况下 shouldEnableComponent1() 和 shouldEnableComponent2() 都调用 checkCondition1() 和 checkCondition2() 方法。它们的启用条件之间的区别在于第三个条件检查,即在组件 1 的情况下为 checkCondition3(),在组件2 的情况下为 checkCondition4()。
这是我能想到的最明显的实现,但它几乎没有问题 -
Duplicity - 由于不同组件的条件检查之间存在重叠,因此这部分代码是重复的。
可扩展性 - 今天有 3 个组件,明天将有 10 个组件。所以,我需要为每个组件实现 10 种不同的方法。那肯定很糟糕。
我正在考虑这个用例的策略模式,但我不确定如何在这里实现它。策略模式是正确的选择吗?如果是,请给出如何实现的高级概念,即我将在哪里放置需要跨类使用的公共变量,将所有具体类的公共逻辑部分放置在哪里等。或者是否有任何其他设计对于这个用例,哪种模式会比策略模式更好? 提前致谢
【问题讨论】:
标签: java design-patterns strategy-pattern