Q:

IFs e Orientação a objetos - C#

Tenho uma dúvida sobre técnicas de como substituir o IF por polimorfismo.
Vou dar o seguinte exemplo:
Digamos que eu tenha as classes ExecucaoIndividual e ExecucaoGeral.
Para isso criei uma interface com o intuito de utilizar o padrão strategy que ficou assim:
interface IExecutor {
    void Executar();
} 

class ExecucaoIndividual : IExecutor {

    public void Executar() {
       //bla bla bla
    }
}

class ExecucaoGeral : IExecutor {

    public void Executar() {
        //bla bla bla
    }
}

Até aí beleza, mas na classe base onde vou verificar qual classe devo chamar (individual ou geral), qual seria a melhor abordagem para não ter que ficar utilizando:
IExecutor execucao;

if(determinadaCondicao)
  execucao = new ExecucaoIndividual();
else
  execucao = new ExecucaoFinal();

execucao.Executar();

Já vi alguns Factories, Maps, etc, mas nada que tirasse essa minha dúvida. Alguém pode me dar uma luz?

A:

Polimorfismo não se aplica aqui.
Polimorfismo acontece nas variáveis, nas instâncias.
Por exemplo:
 Tenho a classe gato, e a classe cachorro, ambas derivadas de animal. A classe animal tem uma propriedade cor e um método alimentar().
Como gato e cachorro são animais, posso chamar cor ou alimentar() em um gato.
Agora, quando crio uma nova instância, não posso criar sem saber o tipo. Nem posso criar um cachorro como se fosse um animal.
No seu caso, o if está na outra "ponta" da lógica. É ele que determina o tipo da classe. E isso não pode ser feito de forma polimórfica.

Quando cria uma nova instância, você precisa definir o tipo.
Quando for usar o objeto, você pode usá-lo como se fosse outro tipo, graças ao polimorfismo.

Factories e outros servirão para centralizar essa decisão de qual tipo instanciar, mas no final, sempre haverá um if ou estrutura equivalente.

