首页 > 解决方案 > 如何使我的这部分代码在 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;
}

这两种方法都有很多共同点。因此,重用部分代码是有意义的。
两种方法的唯一区别是 -

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

此解决方案有效,但我不倾向于使用此解决方案,因为它绝对不可扩展。因为将来,我们可能需要启用更多组件,而这些组件可能需要一些额外的参数来检查,或者可能需要更少的参数来检查。所以,要处理所有这些事情,这段代码很快就会变得非常混乱。我可以遵循任何其他方法/设计模式来使其可扩展吗?

标签: javaalgorithmdesign-patterns

解决方案


推荐阅读