我需要根据要启用软件的2个组件来启用它们。特定组件的资格由很少的参数定义。因此,要启用特定组件,它应满足所有必需的参数。我从地图获得这些参数。我遍历该映射以检查映射的任何键值对是否所有参数都满足条件。如果是,请启用该组件。让我们看一下我的代码以更好地理解-
private boolean enableComponent1() {
String key = prefix1+"enableComponent1"; //prefix1 is a static string
Map<String, Object> inputMap = new HashMap<String, Object> ();
inputMap = useKeyToGetInputMap(key);
for(Map.Entry<String, Object> entry : inputMap.entrySet()) {
Object inputObject = entry.getValue();
String param1Value = inputObject.pram1;
String param2Value = inputObject.pram2;
String param3Value = inputObject.pram3;
if(satisfiesParam1(param1Value) && satisfiesParam2(param2Value) && satisfiesParam3(param3Value)) {
return true;
}
}
return false;
}
private boolean enableComponent2() {
String key = prefix2+"enableComponent2";//prefix2 is a static string
Map<String, Object> inputMap = new HashMap<String, Object> ();
inputMap = useKeyToGetInputMap(key);
for(Map.Entry<String, Object> entry : inputMap.entrySet()) {
Object inputObject = entry.getValue();
String param1Value = inputObject.pram1;
String param2Value = inputObject.pram2;
String param3Value = inputObject.pram3;
String param4Value = inputObject.pram4;
if(satisfiesParam1(param1Value) && satisfiesParam2(param2Value) && satisfiesParam3(param3Value) && satisfiesParam4(param4Value)) {
return true;
}
}
return false;
}
这两种方法有很多共同点。因此,重用部分代码是很有意义的。
两种方法的唯一区别是-
启用组件2取决于4个参数,而组件1取决于3个参数。
因此,为了重用此功能,我编写了如下代码-
private boolean enableComponent(String componentName) {
String key = "";
if(componentName.equals("component1")) {
key = prefix1+"enableComponent1"; //prefix1 is a static string
}
else {
key = prefix2+"enableComponent2"; //prefix2 is a static string
}
Map<String, Object> inputMap = new HashMap<String, Object> ();
inputMap = useKeyToGetInputMap(key);
for(Map.Entry<String, Object> entry : inputMap.entrySet()) {
Object inputObject = entry.getValue();
String param1Value = inputObject.pram1;
String param2Value = inputObject.pram2;
String param3Value = inputObject.pram3;
if(satisfiesParam1(param1Value) && satisfiesParam2(param2Value) && satisfiesParam3(param3Value)) {
if(componentName.equals("component2")) {
String param4Value = inputObject.pram4;
return satisfiesParam4(param4Value);
}
return true;
}
}
return false;
}
此解决方案有效,但我不愿意使用此解决方案,因为它绝对不可扩展。由于将来,我们可能需要启用更多组件,而那些组件可能需要检查一些其他参数,或者可能需要检查较少的参数。因此,要处理所有这些事情,此代码将很快变得非常混乱。我可以遵循其他方法/设计模式来使其具有可扩展性吗?