如何使我的代码的这一部分在Java中可扩展

时间:2019-02-21 05:06:23

标签: java algorithm design-patterns

我需要根据要启用软件的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;
}

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

0 个答案:

没有答案