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

lisak:

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

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。同样的问题也适用于策略模式。

鲍里斯·帕夫洛维奇(BorisPavlović):
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();
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

具有不同已实现方法参数的模板方法模式

具有可变数量的特定模板类型参数的模板函数

C++ lambda 函数的 CC 模式缩进,其返回类型具有模板参数

具有可变模板类型的DescribeFunction参数

具有模板非类型模板参数的功能模板

具有类型化参数的模板模板参数?

Java:调用具有特定类型参数的方法

从具有参数化类型参数的另一个方法调用具有参数化类型参数的方法时,保留特定的结果类型参数

具有先前模板参数类型的自动返回类型参数的函数类型的模板参数

具有可变参数类型的模板多个可变参数继承

具有不同类型的模板非类型参数

非类型模板参数不能具有类型

具有特定类型的休息参数

具有混合类型参数和非类型可变参数的模板模板参数

如何实现具有不同参数/返回类型的抽象方法

如何实现具有不同参数类型的一种方法?

为什么允许具有不同交集类型参数的接口方法实现?

当参数可以具有从特定基本类型派生的任何类型时,如何注释抽象方法的参数类型?

如何确保迭代器模板参数与模板类的模板参数具有相同的数据类型

使用sfinae检测可变参数模板的基类是否具有特定方法

我如何让 TypeScript 保证泛型类型具有实现特定方法的属性?

具有取决于模板参数的方法的模板类

具有模板化函数参数的隐式类型转换

具有包含类类型作为模板参数的成员

添加具有默认类型的模板参数后的歧义调用

如何创建具有可变数量的类型参数的模板?

具有不同模板参数的函数返回类型

具有非类型模板参数的C ++ 20 lambda

具有条件的C ++模板非类型参数