Как использовать шаблон Builder, как описано версией Джошуа Блоха в моем классе ModelInput?

Я пытаюсь использовать шаблон Builder для моего класса ниже. Изначально я использовал конструктор моего класса для установки всех параметров, но случайно наткнулся на шаблон Builder, и он выглядит хорошо для моего варианта использования.

Ниже мой класс, в котором люди будут в основном проходитьuserId, clientId а такжеparameterMap всегда, но другие поля являются необязательными, и они могут или не могут пройти это. А также, если они не передают какое-либо значение тайм-аута, мне нужно всегда устанавливать значение тайм-аута по умолчанию равным 500, но если они пропускают любое значение тайм-аута, то оно должно переопределить мое значение тайм-аута по умолчанию. Здесь Preference - ENUM, имеющий четыре поля.

public final class ModelInput {

    private long userid;
    private long clientid;
    private long timeout = 500L;
    private Preference pref;
    private boolean debug;
    private Map<String, String> parameterMap;

    public ModelInput(long userid, long clientid, Preference pref, Map<String, String> parameterMap, long timeout, boolean debug) {
        this.userid = userid;
        this.clientid = clientid;
        this.pref = pref;
        this.parameterMap = parameterMap;
        this.timeout = timeout;
        this.debug = debug;
    }

 ... //getters here
}    

Ниже приведен пример того, как я изначально использовал для созданияModelInput Объект путем передачи параметров в конструктор. Первоначально я передавал все параметры, но клиенты в основном будут проходитьuserId, clientId а такжеparameterMap всегда и другие поля являются необязательными ..

Map<String, String> paramMap = new HashMap<String, String>();
paramMap.put("attribute", "segmentation");

ModelInput input = new ModelInput(109739281L, 20L, Preference.SECONDARY, paramMap, 1000L, true);

Как мне преобразовать приведенный выше код, чтобы начать использовать шаблон Builder, как было сказано Блохом в Effective Java, который также является поточно-ориентированным и неизменным?

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

Ответы на вопрос(4)

Ваш ответ на вопрос