Ao testar o exemplo acima nós podemos perceber que a classe CalculaSalario pode crescer indefinidamente de acordo com o número de cargos e o número de regras que nós podemos implementar para cada tipo de cargo e valor de salário.
Nós temos dois problemas, o problema da complexibilidade exagerada (if aninhados) e de design. Nós percebemos que é preciso que haja um tipo de mudança para que possamos testar mais facilmente a classe CalculaSalario.
Podemos distribuir toda a regra de calculo de salário para classes diferentes, por exemplo o Desenvolvedor pode ter sua regra implementada por uma classe específica.
Criamos ento uma interface para garantir que quem quiser calcular a regra de salário use um método específico e criamos classes que implementam essa interface.
Ao criar um novo funcionário nós podemos passar qual é o tipo de regra que ele deverá seguir para mostrar o desconto no seu salário. Isto garante que a regra de calculo de salário possa ser alterada em tempo de execuçã