具有特定于实现的参数类型的模板方法模式

lis*_*sak 5 java design-patterns template-method-pattern

当我想使用模板方法模式时,我经常遇到这种情况,但模板方法需要不同类型的参数,如下所示:

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);
}
Run Code Online (Sandbox Code Playgroud)

这看起来不太好。提供的参数之一必须为 null,并且所有服务都必须为其他类型实现虚拟 doProcess 方法。有没有更好的模式呢?你如何处理这个问题?我不想使用构造函数,因为这些服务是 spring bean。同样的问题也适用于策略模式。

Bor*_*vić 4

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();
    }
}
Run Code Online (Sandbox Code Playgroud)