Добавить Singleton в класс Builder - PullRequest
0 голосов
/ 23 марта 2019

У меня есть класс Builder, как показано ниже, но я понятия не имею, как правильно сделать так, чтобы этот класс имел Singleton поведение и оставался моим шаблоном Builder в то же время. Используете какой-нибудь одноэлементный тип перечисления? или какой-то рекомендуемый способ?

@AllArgsConstructor(access = AccessLevel.PRIVATE)
@Getter
public class ClientMailAdapter {

public static ClientMailAdapter.WebLiteRequestBuilder builder() {
    return new ClientMailAdapter.WebLiteRequestBuilder();
}

@NoArgsConstructor(access = AccessLevel.PRIVATE)
public static class WebLiteRequestBuilder {
    private Map<String, String> parameters;
    private String username;
    private String password;
    private Source source;

    public ClientMailAdapter.WebLiteRequestBuilder parameters(final Map<String, String> parameters) {
        this.parameters = parameters;
        return this;
    }

    public ClientMailAdapter.WebLiteRequestBuilder username(final String username) {
        this.username = username;
        return this;
    }

    public ClientMailAdapter.WebLiteRequestBuilder password(final String password) {
        this.password = password;
        return this;
    }

    public ClientMailAdapter.WebLiteRequestBuilder source(final Source source) {
        this.source = source;
        return this;
    }

    public ClientMailResult sendEmail() {
        return new ClientMailService().sendEmailXML(
                ClientRequest.builder()
                        .username(username)
                        .password(password)
                        .parameters(parameters)
                        .source(source)
                        .build());
    }
}

@AllArgsConstructor
@Getter
public enum Source {
    XXXXX("Source Name To Be Defined X");

    private final String name;

}

}

...