当我想使用模板方法模式时,经常会遇到这种情况,但是模板方法期望使用不同类型的参数,例如:

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();
    }
}

09-29 20:33