Minha resposta será um pouco filosófica, tá? Então quem não entender ou discordar, entre na conversa e dê sua opinião também.
Sua dúvida está relacionada a melhor prática: criar uma instância de cada tipo (ex. vários objetos do tipo Gerente) a cada criação de funcionário OU usar um singleton para reaproveitar a instância do tipo, uma vez que o que queremos nesse exemplo é apenas a estratégia específica, que no caso é o cálculo do pagamento?
Eu acho (minha opinião) que realmente é insignificante ter esses vários objetos em memória, ainda mais se forem criados dentro de um método que logo deixará de executar e por conseguinte esses objetos sairão da memória por força do Garbage Collector. Mas pode ser que a aplicação precise gerenciar melhor sua memória, por causa de requisitos específicos. Nesses casos, vale a pena buscar técnicas que otimizem a memória.
Por outro lado, podemos refletir que o emprego do Singleton representa um objeto único dentro da aplicação. No caso, Gerente é uma instância de um cargo. Não existem dois cargos gerente, certo? Então, sob essa perspectiva conceitual, faz sentido usarmos singleton.
Fiquei em cima do muro né? Mas é aquela famosa resposta: depende.
E aí, Márcio, ajudou ou piorou?