java—哪种设计模式最适合避免方法中的多个参数

jjhzyzn0  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(369)

我有以下课程:

public class SomeAssebler {

    private EnrichedRequest assembleBasicEnrichedRequest(BasicRequest request) {
        EnrichedRequest enrichedRequest = new EnrichedRequest();
        if (request != null) {
            enrichedRequest.setId(request.getId());
            enrichedRequest.setDate(request.getDate());
            enrichedRequest.setParam(request.getParam());
        }
        return enrichedRequest;
    }

    private static EnrichedRequest assembleGeoDataEnrichedRequest(EnrichedRequest request, GeoData geoData) {
        EnrichedRequest geoEnrichedRequest = Optional.ofNullable(request).orElse(new EnrichedRequest());
        if (geoData != null) {
            geoEnrichedRequest.setCity(geoData.getCity());
            geoEnrichedRequest.setCountryCode(geoData.getCountryCode());
        }
        return geoEnrichedRequest;
    }

    private static EnrichedRequest assembleUserAgentEnrichedRequest(EnrichedRequest request, UserAgentData userAgentData) {
        EnrichedRequest userAgentEnrichedRequest = Optional.ofNullable(request).orElse(new EnrichedRequest());
        if (userAgentData != null) {
            userAgentEnrichedRequest.setBrowser(userAgentData.getBrowserCode());
            userAgentEnrichedRequest.setOperatingSystem(userAgentData.getOsCode());
            userAgentEnrichedRequest.setManufacturer(userAgentData.getBrand());
        }
    }

    public static EnrichedRequest assembleEnrichedRequest(BasicRequest request, GeoData geoData, UserAgentData userAgentData) {
        EnrichedRequest enrichedRequest = assembleBasicEnrichedRequest(request);
        enrichedRequest = assembleGeoDataEnrichedRequest(enrichedRequest, geoData);
        enrichedRequest = assembleUserAgentEnrichedRequest(enrichedRequest, userAgentData);
        return enrichedRequest;
    }
}

它在不同的变压器中被称为:在geodatatransformer中

new KeyValue<>(key, assembleEnrichedRequest(basicRequest, geoData, null))

在useragenttransformer中:

new KeyValue<>(key, assembleEnrichedRequest(enrichedRequest, null, userAgent))

如果更多的“丰富”将被添加到未来这可能会变得非常丑陋。有人知道我怎么能设计得更好吗?我想到了建设者的设计模式,但我不确定。

rjee0c15

rjee0c151#

你可以用 Builder Pattern ,但您必须在代码中做一些更改。
您可以通过这个链接进行检查,这个链接解释了如何使用生成器模式以及它解决了什么问题。你可以尝试这样的方法有很多不同的方法来创建一个 Builder 班级。

public static class EnrichedRequestBuilder() {
    private EnrichedRequest enrichedRequest:
    private BasicRequest basicRequest:
    private GeoData geoData;
    private UserAgentData userAgentData;

    public EnrichedRequestBuilder enrichedRequest(EnrichedRequest e) {
        this.enrichedRequest = e;
        return this;
    }

    public EnrichedRequestBuilder basicRequest(BasicRequest e) {
        this.basicRequest = e;
        return this;
    }

    public EnrichedRequestBuilder build() {
        return new EnrichedRequestBuilder(this);
    }

}

new EnrichedRequestBuilder().basicRequest(b).enrichedRequest(e).build();

相关问题