使用静态实用程序与装饰器模式

时间:2013-11-19 20:26:24

标签: java static decorator

我不知道Spring,但要了解我通过Spring教程阅读的一些java模式,并偶然发现下面的代码。从它看起来,这看起来像经典装饰,但你看到ValidationUtils.invokeValidator(this.addressValidator, customer.getAddress(), errors);。我使用实用程序委托给另一个验证器有点不舒服,因为我觉得单元测试这些静态调用很困难(虽然它可以通过PowerMock实现,但不是同样的忠实粉丝)。我觉得addressValidator.validate()非常清晰。因为我正在为我的应用程序编写一个自定义验证器,我只是想对这些方法有所了解。

public class CustomerValidator implements Validator {
    private final Validator addressValidator;

    public CustomerValidator(Validator addressValidator) {
        this.addressValidator = addressValidator;
    }

    public boolean supports(Class clazz) {
        return Customer.class.isAssignableFrom(clazz);
    }

    public void validate(Object target, Errors errors) {
        ValidationUtils.rejectIfEmptyOrWhitespace(errors, "firstName", "field.required");
        ValidationUtils.rejectIfEmptyOrWhitespace(errors, "surname", "field.required");
        Customer customer = (Customer) target;
        try {
            errors.pushNestedPath("address");
            ValidationUtils.invokeValidator(this.addressValidator, customer.getAddress(), errors);
        } finally {
            errors.popNestedPath();
        }
    }
}

0 个答案:

没有答案