指令数据采集(四)--指令的条件处理
例如条件:(A=B)&&(B>C)
条件使用的是条件组的概念,单独的条件也是一个条件组例如,A和B是条件关联,B和C也是条件关联,(A=B)和(B>C)是组关联,那么我建的对象如下
1 public class GroupCondition implements Cloneable{ 2 3 //star 左边所有的判断 4 /** 5 * A左边的属性判断 6 */ 7 private Param paramA; 8 /** 9 * 放入的条件判断 属性和属性的条件判断 10 */ 11 private IConditionOperation iConditionOperation; 12 /** 13 * B右边的属性判断 14 */ 15 private Param paramB; 16 //end 右边所有的判断 17 /** 18 * 组的判断条件 19 */ 20 private IConditionOperation iConditionOperationGroup; 21 22 /** 23 * 组 24 */ 25 private GroupCondition groupCondition; 26 27 28 public GroupCondition(){} 29 /** 30 * 实例化一个组 只包含了 一个组的基本条件 31 * @param paramA 32 * @param iConditionOperation 33 * @param paramB 34 */ 35 public GroupCondition(Param paramA, IConditionOperation iConditionOperation, Param paramB) { 36 this.paramA = paramA; 37 this.iConditionOperation = iConditionOperation; 38 this.paramB = paramB; 39 } 40 41 /** 42 * 实例化一个完全的组 包含了三个基本条件和一个租 43 * @param paramA 44 * @param iConditionOperation 45 * @param paramB 46 * @param iConditionOperationGroup 47 * @param groupCondition 48 */ 49 public GroupCondition(Param paramA, 50 IConditionOperation iConditionOperation, 51 Param paramB, 52 IConditionOperation iConditionOperationGroup, 53 GroupCondition groupCondition) { 54 this.paramA = paramA; 55 this.iConditionOperation = iConditionOperation; 56 this.paramB = paramB; 57 this.iConditionOperationGroup = iConditionOperationGroup; 58 this.groupCondition = groupCondition; 59 } 60 61 /** 62 * 实例化两个租 63 * @param groupConditionA 64 * @param iConditionOperationGroup 65 * @param groupConditionB 66 */ 67 public GroupCondition(GroupCondition groupConditionA, 68 IConditionOperation iConditionOperationGroup, 69 GroupCondition groupConditionB) { 70 71 this.paramA = groupConditionA.getParamA(); 72 this.paramB = groupConditionA.getParamB(); 73 this.iConditionOperationGroup = iConditionOperationGroup; 74 this.groupCondition = groupConditionB; 75 } 76 77 public Param getParamA() { 78 return paramA; 79 } 80 81 public void setParamA(Param paramA) { 82 this.paramA = paramA; 83 } 84 85 public IConditionOperation getiConditionOperation() { 86 return iConditionOperation; 87 } 88 89 public void setiConditionOperation(IConditionOperation iConditionOperation) { 90 this.iConditionOperation = iConditionOperation; 91 } 92 93 public Param getParamB() { 94 return paramB; 95 } 96 97 public void setParamB(Param paramB) { 98 this.paramB = paramB; 99 } 100 101 public IConditionOperation getiConditionOperationGroup() { 102 return iConditionOperationGroup; 103 } 104 105 public void setiConditionOperationGroup(IConditionOperation iConditionOperationGroup) { 106 this.iConditionOperationGroup = iConditionOperationGroup; 107 } 108 109 public GroupCondition getGroupCondition() { 110 return groupCondition; 111 } 112 113 public void setGroupCondition(GroupCondition groupCondition) { 114 this.groupCondition = groupCondition; 115 } 116 117 @Override 118 protected GroupCondition clone() throws CloneNotSupportedException { 119 GroupCondition groupCondition = new GroupCondition(); 120 if(this.getParamA()!=null){ 121 groupCondition.setParamA(groupCondition.getParamA().clone()); 122 } 123 if(this.getParamB()!=null){ 124 groupCondition.setParamB(groupCondition.getParamB().clone()); 125 } 126 if(this.getiConditionOperation()!=null){ 127 groupCondition.setiConditionOperation(this.getiConditionOperation()); 128 } 129 if(this.getiConditionOperationGroup()!=null){ 130 groupCondition.setiConditionOperation(this.getiConditionOperationGroup()); 131 } 132 if(this.getGroupCondition()!=null){ 133 groupCondition.setGroupCondition(this.getGroupCondition().clone()); 134 } 135 return groupCondition; 136 } 137 }
代码解析
1.使用递归的关系进行实现条件A作为paramA,条件B作为paramB,中间的接口iConditionOperation来进行条件判断
条件判断的代码
1.接口
1 public interface IConditionOperation { 2 3 /** 4 * 组比较的成员 5 * @param paramA 6 * @param paramB 7 * @return 8 */ 9 boolean operation(Param paramA,Param paramB); 10 11 /** 12 * 组关系和组关系之间的逻辑判断 13 * @param flagA 14 * @param flagB 15 * @return 16 */ 17 boolean operationLogic(boolean flagA,boolean flagB); 18 }