implementado Strategy pattern.