Quando li a descricao do problema a primeira ideia que me veio a mente foi usar uma chain.me pergunto se essa abordagem se adequaria a situacao ou nao. no caso, usar uma interface filtro com os 3 tipos de filtro a implementando, sendo que cada filtro tem aquele padrao de um atributo apontando pro proximo filtro da lista e tal.