【发布时间】:2014-09-09 09:09:44
【问题描述】:
我有一个方法可以执行以下操作:
private void computeHierarchie(GlobalKey key) {
HierarchieValue hierarchieValue = hierarchieFactory.createHierarchie(selectedKey);
....
}
GlobalKey 有 4 个孩子:KeyA、KeyB、KeyC 和 KeyD。
目前我的工厂如下所示:
public class HierarchieFactory {
// inject someFacade which has 4 different methods
public HierarchieValue createHierarchie(GlobalKey key) {
if (key instanceof KeyA) {
return someFacade.computeHierarchie((KeyA) key);
}
if (key instanceof KeyB) {
return someFacade.computeHierarchie((KeyB) key);
}
if (key instanceof KeyC) {
return someFacade.computeHierarchie((KeyC) key);
}
if (key instanceof KeyD) {
return someFacade.computeHierarchie((KeyD) key);
}
return new HierarchieValue();
}
}
我真的不喜欢这种 switch-case 的东西,但老实说,我无法计算出任何有价值的重构。我尝试了类似以下的方法:
public abstract class AbstractHierarchieFactory {
//inject someFacade
abstract <T extends GlobalKey> HierarchieValue createHierarchie(T key);
}
然后是扩展这一类的 4 个类。一个看起来像:
public class KonzernHierarchieFactory extends AbstractHierarchieFactory {
@Override
HierarchieValue createHierarchie(KonzernKey konzernKey) {
return evaFacade.computeHierarchie(konzernKey);
}
}
这太好了! 但遗憾的是,这不起作用。你有什么其他的建议?必须有一个标准的方法来解决这个问题。
【问题讨论】:
标签: refactoring switch-statement abstract-class instanceof