This splits the logic nicely into separate classes that can be mixed together to create the strategy that you want.