Olá Lucas,
Essa é uma forma, você poderia passar uma lista ao invés de instanciar a lista no construtor, ex.
List<ValidacaoReajuste> validacoes = new ArrayList<>();
validacoes.add(new ValidarPercentualReajuste());
validacoes.add(new ValidarPeriodicidadeReajuste());
new ReajusteService(validacoes).reajustarSalarioFuncionario(funcionario, aumento);
Factories
Dá para melhorar isso um pouco passando a construção das validações para uma fábrica, ficaria algo como isso:
/** dentro do serviço de reajuste **/
List<ValidacaoReajuste> validacoes = ValidacoesReajusteFactory.getValidacoes();
new ReajusteService(validacoes).reajustarSalarioFuncionario(funcionario, aumento);
/** e no factory **/
public class ValidacoesReajusteFactory {
public static List<ValidacaoReajuste> getValidacoes() {
List<ValidacaoReajuste> validacoes = new ArrayList<>();
validacoes.add(new ValidarPercentualReajuste());
validacoes.add(new ValidarPeriodicidadeReajuste());
return validacoes;
}
}
Dessa forma sempre que precisar adicionar mais uma validação, você só precisaria criar a classe da validação e instanciar ela no factory.
Frameworks
Contudo isso ainda pode ser melhorado, frameworks como Spring por exemplo permite a declaração de componentes e serviços que podem ser injetados usando o @Autowired, neste caso você pode declarar as validações em um local, como um arquivo de configuração XML ou properties (o que permite gerenciar validações por ambientes), o Spring se encarrega de instanciar, manter a referência e injetar nas os objetos que precisam delas, aqui tem um guia interessante -> baeldung - Spring Dependency Injection