Вы можете создать конструктор для своего User
класса, назовем его UserBuilder
.
Для каждого из свойств User
(логин, электронная почта, телефон) в классе построителя, Вы можете указать не только значение, которое вы хотите установить для экземпляра User
, но и Predicate
, который вы можете сразу применить. Если какой-либо из предикатов потерпит неудачу, вы можете легко сгенерировать исключение и / или вывести сообщение, например, c.
Для всех создаваемых вами экземпляров вы можете при желании передать различные правила проверки или дополнительно Разработайте ваш конструктор так, чтобы пропустить проверку для любого из полей User
.
Пример:
public class UserBuilder {
private String phone;
private String email;
//add more properties here;
public void phone(String phone, Predicate<String> phoneValidator) {
if (!phoneValidator.test(phone)) {
throw new UserBuilderException("Invalid phone provided");
}
this.phone = phone;
return this;
}
public void email(String email, Predicate<String> emailValidator) {
if (!emailValidator.test(email)) {
throw new UserBuilderException("Invalid email provided");
}
this.email = email;
return this;
}
//add more builder methods here
public User build() {
return new User(phone, email);
}
}
Вы можете использовать это с:
Predicate<String> phoneValidator = ....
Predicate<String> emailValidator = ....
User user = new UserBuilder()
.phone("123567", phoneValidator)
.email("something@example.com", emailValidator)
.build();
Что вы получить следующее:
- Гибкость для предоставления пользовательских правил проверки (или пропуска некоторых из них) для каждого имеющегося у вас экземпляра
User
. - Лучшая видимость того, какие свойства не соответствуют их соответствующим параметрам. правила проверки.
- Нет
User
экземпляров, созданных с недопустимым содержимым. Экземпляр User
будет создан только для кортежей свойств, которые передают все значения Predicate
, предоставленные в их построителях.