指令在执行的时候,执行当前的指令前,需要进行判断当前的指令是否需要执行,则需要对条件进行判断,根据前面设计的条件判断方式和对象,则现在的条件执行需要嵌套递归执行,也就是(条件组(条件组(条件组(条件组))))
1 public class GroupConditionExector { 2 private List<Param> paramList; 3 public GroupConditionExector(List<Param> paramList){ 4 this.paramList = paramList; 5 } 6 public GroupConditionExector(){} 7 public boolean execute(GroupCondition groupCondition){ 8 //组成员的判断 9 IConditionOperation iConditionOperation = groupCondition.getiConditionOperation(); 10 IConditionOperation iConditionOperationGroup; 11 Param paramA = groupCondition.getParamA(); 12 Param paramB = groupCondition.getParamB(); 13 //组成员 14 if(paramList!=null&&!paramList.isEmpty()){ 15 for(Param param:paramList){ 16 if(paramA!=null){ 17 if(param.getParamKey()!=null 18 &¶mA.getParamKey()!=null 19 &¶m.getParamKey().getKeyId()!=null 20 &¶mA.getParamKey().getKeyId()!=null 21 &¶m.getParamKey().getKeyId().equals(paramA.getParamKey().getKeyId())){ 22 //将当前的值复制给 判断的值 23 if(param.getParamValue()!=null) { 24 paramA.setParamValue(param.getParamValue()); 25 } 26 } 27 } 28 } 29 } 30 boolean paramFlag; 31 //组属性的判断 32 boolean groupFlag; 33 boolean groupResult; 34 /** 35 * 如果设置了组判断的条件就进行判断 36 * 如果没有设置组判断条件则直接返回 37 * 递归处理条件 38 */ 39 if(groupCondition.getGroupCondition()!=null) { 40 groupFlag = execute(groupCondition.getGroupCondition()); 41 if(paramA!=null&¶mB!=null) { 42 //如果当前组的条件是存在的则进行处理 43 paramFlag= iConditionOperation.operation(paramA, paramB); 44 }else { 45 //如果不存在则使用组的结果直接进行判断 46 paramFlag = groupFlag; 47 } 48 iConditionOperationGroup = groupCondition.getiConditionOperationGroup(); 49 groupResult = iConditionOperationGroup.operationLogic(paramFlag,groupFlag); 50 /** 51 * 经过组判断 返回组判断的结果 52 */ 53 return groupResult; 54 }else { 55 //没有组进行判断 56 paramFlag= iConditionOperation.operation(paramA, paramB); 57 /** 58 * 没有经过组判断 返回结果 59 * 递归判断返回的结果 60 */ 61 return paramFlag; 62 } 63 64 } 65 }
递归判断执行对象 能够决定是否执行当前的指令,设置的是Instruction当中的isCondition属性,true为执行,false为否