我正在重构一段包含大量if / else分支的代码
我正在使用策略模式建议here并创建了一堆实现if分支内部功能的类
在此基础上我发现有一些情况是代码在实际完成实际工作之前做了一些“额外的”工作,所以现在我想做出最严格的设计决定:
1)有如下内容:
public abstract class Processor {
private abstract void mainProcess(Object o);
protected void preProcess(Object o) {}
public void process(Object o) {
preProcess(o);
mainProcess(o);
}
}
很少有类实际上会覆盖preProcess
具有特定逻辑,而其余类只是一个“空”钩子。
2)有类似的东西:
public interface Processor {
public void process(Object o);
}
public class XProcessor implements Processor {
@Override
public void process(Object o) {
//code here
}
}
public class SpecialCaseProcessor extends XProcessor {
private void preProcess(Object o) {
//code here
}
@Override
public void process(Object o) {
preProcess(o);
super.process(o);
}
}
说实话我有点像(1)但我不喜欢那样的,例如30个类中的5个实际上将实现预处理。
在(2)中我避免空钩子但是我需要在“构造函数/工厂”中区分特定的扩展子类
什么是最可靠/最易读的方法?
答案 0 :(得分:0)
我认为你可以拥有这样的东西 -
1)Processor
界面
2)AbstractProcessor
抽象类,它实现Processor
并具有preProcess
抽象方法。
3)让非特殊情况处理器实现Processor
,特殊情况处理器扩展AbstractProcessor
类。
我认为这样你就可以避免空钩子并仍然区分特定的类。