在Java中使用泛型/模式进行对象映射

时间:2018-10-12 14:10:58

标签: java generics design-patterns proxy

我有一个代理服务,它公开了几个API-每个API请求一个特定类型的Object并返回一个特定类型的Object。请求到达我的ProxyService,这些请求被映射为基础服务所需的格式:

public class ProxyService {
    public ProxyServiceResponse_A performA(ProxyServiceRequest_A request);
    public ProxyServiceResponse_B performB(ProxyServiceRequest_B request);
    public ProxyServiceResponse_C performC(ProxyServiceRequest_C request);
    ...
}

public class ProxiedService {
    public ProxiedServiceResponse_A performA(ProxiedServiceRequest_A request);
    public ProxiedServiceResponse_B performB(ProxiedServiceRequest_B request);
    public ProxiedServiceResponse_C performC(ProxiedServiceRequest_C request);
    ...
}

我想创建用于将传入的ProxyService请求映射到ProxiedService请求的通用映射器:

public class MyRequestMapper {
    public ProxiedServiceRequest_A mapRequestA(ProxyServiceRequest_A request);
    ...
}

我知道推土机和apache-velocity,但是我不想使用它们,而是自己动手做。有没有设计模式或通用方法可以实现这一目标?

1 个答案:

答案 0 :(得分:0)

您可以考虑使用通用接口。

interface RequestMapper<T, U> {
    U mapRequest(T request);
}

class ARequestMapper implements RequestMapper<ProxyServiceRequest_A, ProxiedServiceRequest_A> {
    @Override
    public ProxiedServiceRequest_A mapRequest(ProxyServiceRequest_A request) {
        //TODO
    }
}

class BRequestMapper implements RequestMapper<ProxyServiceRequest_B, ProxiedServiceRequest_B> {
    @Override
    public ProxiedServiceRequest_B mapRequest(ProxyServiceRequest_B request) {
        //TODO
    }
}