当我想使用模板方法模式时,经常会遇到这种情况,但是模板方法期望使用不同类型的参数,例如:
public abstract class AbstractFoo {
public void process(TypeA a, TypeB b) {
//do common processing
if (b == null) {
doProcess(a);
} else if(a == null) {
doProcess(b);
}
}
public abstract void doProcess(TypeA a);
public abstract void doProcess(TypeB b);
}
这看起来不太好。提供的参数之一必须为null,并且所有服务都必须为其他类型实现虚拟doProcess方法。有没有更好的模式呢?您如何处理?我不想使用构造函数,因为这些服务是Spring Bean。同样的问题也适用于策略模式。
最佳答案
public abstract class AbstractFoo<T> {
public void process(T a) {
//do common processing
doProcess(a);
}
protected abstract void doProcess(T a);
}
public class Person extends AbstractFoo<Person> {
@Override
protected void doProcess(Person p) {
p.draw();
}
}
public class Car extends AbstractFoo<Car> {
@Override
protected void doProcess(Car c) {
c.draw();
}
}