Вы можете использовать шаблон Декоратор здесь.Создайте интерфейс с единственным методом validate (), а затем создайте разные классы, реализующие этот интерфейс, содержащий код проверки.Затем вы можете вызвать validate для объекта, который вы строите, и это повредит все остальные проверки.
Это дает дополнительное преимущество, заключающееся в улучшении модульности кода, что позволяет вам независимо проверять проверки.При необходимости вы также можете легко добавлять или удалять проверки из цепочки.
Простой пример приведен ниже.
public interface Validator {
void validate(Object input) throws ValidationException
}
public class ValidationOne implements Validator {
protected Validator validator;
public ValidationOne(Validator validator) {
this.validator = validator;
}
public void validate(Object input) throws ValidationException {
if (validator != null)
validator.validate(input);
// do specific ValidationOne checks
if (!isValid(input)) throw new ValidationException()
}
}
public class ValidationTwo implements Validator {
protected Validator validator;
public ValidationTwo(Validator validator) {
this.validator = validator;
}
public void validate(Object input) throws ValidationException {
if (validator != null)
validator.validate(input);
// do specific ValidationTwo checks
if (!isValid(input)) throw new ValidationException()
}
}
public class Tester {
public void runValidations(Object obj) {
Validator validator = new ValidationOne(null);
validator = new ValidationTwo(validator);
// continue adding validations as needed
try {
validator.validate(obj);
} catch (ValidationException e) {
System.err.println("Validation error occurred");
}
}
}