code: public static <T extends GenericResult<ValidationError>> T validate(Decorator decorator, FluentValidator fluentValidator, ValidatorContext context, ResultCollector<T> resultCollector) {
          FluentValidator fv = decorator.decorate(fluentValidator);
          if (context != null) {
              fv.withContext(context);
          }
  
          T localResult = fv.failOver()
                  .doValidate()
                  .result(resultCollector);
  
          return localResult;
      }
docs: Use the <code>decorator</code> to add or attach more functions the given <code>fluentValidator</code> instance.
  <p>
  The context can be shared and set up in the new FluentValidator instance.
  <p>
  The motivation for this method is to provide a quick way to launch a validation task. By just passing
  the validation logic which is wrapped inside the decorator, users can do validation in a ease way.
  <p>
  Because Java7 lacks the ability to pass "action" to a method, so there is {@link Decorator} to help
  to achieve a functional programming approach to get it done. In Java8, users can replace it with lambda.
  
  @param decorator       Same as decorator design pattern, provided to add more functions to the fluentValidator
  @param fluentValidator The base fluentValidator to be executed upon
  @param context         Validation context which can be shared
  @param resultCollector Result collector
  @return Result