Implementação mais ou menos do padrão strategy