我班上有一个List界面类型.CriteriaQuery
List<Criteria> criteria = new ArrayList<Criteria>();
Run Code Online (Sandbox Code Playgroud)
我有几个具体的实现Criteria.我想给出Query一个遍历criteria列表的方法,并根据具体类型执行一些逻辑.
我现在这样做instanceof是这样的:
for(Criteria c : criteria) {
if(c instanceof ContextualCriteria){
// logic
}
...
}
Run Code Online (Sandbox Code Playgroud)
这是唯一/最好的方式吗?
逻辑是否合理地属于Criteria自身?如果是这样,将它放入Criteria接口并为实现Criteria接口的每个具体类适当地实现它.这显然是很好的多态方法.
不幸的是,在现实生活中,OO并不总是像那样简单 - 有时将per-type行为放在类型本身中是没有意义的,所以你可能需要使用它instanceof.你可以潜在地具有"标准级"来代表行动采取一些界面中的地图,但是这样很容易最终被甚至混乱.
通过访问者模式进行双重调度有时可以改善一些事情 - 因此逻辑仍然可以在"调用"类中的单独方法中,但每个方法都Criteria可以通过单个接口方法回调正确的方法.就个人而言,我倾向于发现这种增加耦合并迅速变得丑陋,但其他人则发誓.
| 归档时间: |
|
| 查看次数: |
1686 次 |
| 最近记录: |