Я бы сказал, что перечисления и шаблон стратегии на самом деле не смешиваются.
Идеальным вариантом использования перечисления является то, что представляет собой исчерпывающий набор вариантов. DayOfWeek
, например, с понедельника по воскресенье. Проблема с использованием этого, в дополнение к невозможности автоматической передачи каких-либо других bean-компонентов, состоит в том, что ваше перечисление будет продолжать расти с увеличением числа проверок.
Шаблон стратегии позволяет вам использовать потенциально бесконечное число возможных стратегий при условии соблюдения контракта. Взять, к примеру, Collections.sort(List<T> list, Comparator<? super T> c)
. Не может быть исчерпывающего списка возможных компараторов, потому что он никогда не сможет удовлетворить все варианты использования.
Имеет больше смысла определять каждую из ваших возможных стратегий как компонент
@Component
class NonNullValidationStrategy implements ValidationStrategy {
private final MyService service;
//constructor
@Override
public boolean isValid(MyClass foo) {
return foo != null;
}
}
То, как вы получите экземпляр правильной стратегии, когда она вам понадобится, будет зависеть от деталей, которых у вас нет ' т предоставляется. Возможно, возможно автоматическое подключение с квалификатором.
У Spring уже есть собственный способ определения проверок через интерфейсы и аннотации . Я предлагаю вам продолжить, прежде чем предлагать собственное решение.