Как использовать шаблон 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? Вполне возможно, что люди могут передавать идентификаторы нуля или отрицательные числа одинаково с идентификатором клиента и временем ожидания, а также с картой.