Control class for an entity
Creating validators

I think it's perfectly readable. However, there's a lot of repetition.

To make creating validators simpler and more declarative, you could take it one step further and lift the test/return-Optional logic into a higher-order function:

public class StudentControl {

  public static final StudentValidator namesValidator = validator(
    student -&gt; namePattern.matcher(student.getName()).matches(),
    "Invalid name"
  );

  ...

  private static StudentValidator validator(Predicate&lt;Student&gt; pred, String error) {
    return student -&gt; pred.test(student)
      ? Optional.empty()
      : Optional.of(error);
  }
}


and then if you have other models besides Student, you might genericize the validators.

interface EntityValidator&lt;T&gt; extends Function&lt;T, Optional&lt;ValidationError&gt;&gt; {}

public abstract class EntityControl&lt;T&gt; {
  protected final List&lt;EntityValidator&lt;? super T&gt;&gt; validators = new ArrayList();

  protected EntityValidator&lt;T&gt; validator(Predicate&lt;T&gt; pred, String error) {
    return x -&gt; pred.test(x)
      ? Optional.empty()
      : Optional.of(error);
  }

  // Or, if you want to allow any subclass to create a validator for any type,
  // it could be static:
  protected static &lt;T&gt; EntityValidator&lt;T&gt; validator(...)

  public Optional&lt;List&lt;ValidationError&gt;&gt; validate(T entity) {
    ...
  }
}


This feels a bit cleaner to me as far as separation of concerns, but if you're only ever going to validate Students it's probably overkill.

Other

You might also consider having validate() return an Optional&lt;Set&lt;ValidationError&gt;&gt; instead of the List, if order isn't important. Since validation errors are just strings, you can't effectively do any further handling of them, so I assume they just get piped out to the user somehow?


  Does it comply with the MVC pattern?


I'm not an MVC expert, but: what is the view supposed to be? You haven't included anything that displays Students or errors, receives input, or otherwise does anything with Students, so it's hard to thoroughly assess this.