java - 如何使我的这部分代码在 java 中可扩展
问题描述
我需要根据要启用的资格启用我的软件的 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;
}
这两种方法都有很多共同点。因此,重用部分代码是有意义的。
两种方法的唯一区别是 -
获取 inputMap 的键不同。
组件 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;
}
此解决方案有效,但我不倾向于使用此解决方案,因为它绝对不可扩展。因为将来,我们可能需要启用更多组件,而这些组件可能需要一些额外的参数来检查,或者可能需要更少的参数来检查。所以,要处理所有这些事情,这段代码很快就会变得非常混乱。我可以遵循任何其他方法/设计模式来使其可扩展吗?
解决方案
推荐阅读
- r - 如何提取深度轮廓(来自 DepthProc 的 depthContour)以在 ggpplot2 中使用它们?
- asp.net - ASP.NET Core Entity Framework 插入失败但有时会通过
- excel - 将 While 语句中的多个附件添加到电子邮件参数
- angular - 垫滑块的拇指尺寸
- python - 在python中导入和使用openGL的问题
- javascript - 是否可以在 Chrome 上以编程方式模拟快捷键事件?
- mysql - Grails GORM 在重新部署后停止工作,因为无法从数据库加载数据
- tensorflow - 在亚马逊 sagemaker 中服务的 tensorflow:连接两个嵌入张量时出现 _MklConcatOp 错误(一个形状(None, 6, 8),其他形状(None, 6, 4))
- robotframework - 机器人框架:不接受 json 文件的相对路径
- delay - 将不同的源与每个源的延迟时间联系起来