接口层
首先我们看Calc的接口。
他下面还有11个其他类型的计算器接口,分别是:
- VoidCalc 接口
void evaluateVoid(Evaluator evaluator)
- MemberCalc 接口
Member evaluateMember(Evaluator evaluator)
- LevelCalc 接口
Level evaluateLevel(Evaluator evaluator)
- DateTimeCalc 接口
Date evaluateDateTime(Evaluator evaluator)
- DimensionCalc 接口
Dimension evaluateDimension(Evaluator evaluator)
- HierarchyCalc 接口
Hierarchy evaluateHierarchy(Evaluator evaluator)
- DoubleCalc 接口
double evaluateDouble(Evaluator evaluator)
- BooleanCalc 接口
boolean evaluateBoolean(Evaluator evaluator)
- TupleCalc 接口
Member[] evaluateTuple(Evaluator evaluator)
- StringCalc 接口
String evaluateString(Evaluator evaluator)
- IntegerCalc 接口
int evaluateInteger(Evaluator evaluator)
抽象层
AbstractCal实现了Calc接口。
在它下面有10种不同的抽象计算器,分别实现了上述的11中接口类型。
注意AbstractVoidCalc并没有继承。
- GenericCal 抽象类 实现了所有的Calc下层接口,除了Calc的
Object evaluate(Evaluator evaluator)
接口 - AbstractMemberCalc 抽象类 需实现
Member evaluateMember(Evaluator evaluator)
- AbstractLevelCalc 抽象类 需实现
Level evaluateLevel(Evaluator evaluator)
- AbstractDimensionCalc 抽象类 需实现
Dimension evaluateDimension(Evaluator evaluator)
- AbstractHierarchyCalc 抽象类 需实现
Hierarchy evaluateHierarchy(Evaluator evaluator)
- AbstractDoubleCalc 抽象类 需实现
double evaluateDouble(Evaluator evaluator)
- AbstractBooleanCalc 抽象类 需实现
boolean evaluateBoolean(Evaluator evaluator)
- AbstractTupleCalc 抽象类 需实现
Member[] evaluateTuple(Evaluator evaluator)
- AbstractStringCalc 抽象类 需实现
String evaluateString(Evaluator evaluator)
- AbstractIntegerCalc 抽象类 需实现
int evaluateInteger(Evaluator evaluator)
通用层
GenericCal实现了这11个接口并继层了AbstractCal,在它下面还有几个实现类
- AbstractVoidCalc 具体类,不返回任何值,这个类貌似应该继承AbstractCal即可,没必要继承GenericCal。
- ConstantCalc 具体类 求值结果与原参数相同。
- TupleValueCalc 具体类 在当前元组上下文中求cell值。
- ValueCalc 具体类 直接在当前上下文中求Cell值
- MemberArrayValueCalc 在多个成员上下文中求Cell值
- CacheCalc 具体类 在缓存中获取Cell值
- MemberValueCalc 具体类 在当前成员上下文中求Cell值
集合层
还有一种特殊类型IterCalc接口也继承了Calc。
ListCalc接口也继承IterCalc.
他们有4个类
- AbstractIterCalc实现了IterCalc,并继承了AbstractCal。
- AbstractListCalc实现了ListCalc,并继承了AbstractCal。
- GenericIterCalc实现了ListCalc和IterCalc,并继承了AbstractCal。
- IterableCalc继承了AbstractListCalc
使用
那么问题来了,有了这么多求值器,我应该在程序中使用哪种呢?下面将对如何选择各个层做分析。
- 如果是求一般的成员,维度,数值,级别等等。那么,使用抽象层即可。
- 如果是求集(Set)类型的,那么使用集合层。
- 如果是求Cell值或者其他操作,那么使用通用层。