Injeção de dependências x Padrão de projetos Strategy - Um substitui o outro?

Pessoal, andei lendo sobre o padrão Strategy, e notei que ele tem como finalidade inverter o controle, e como já conhecia o padrão ID, lembrei que o mesmo tbm faz a mesma coisa.

Então, estou enganado, ou é isso mesmo?

A Injeção de dependências está contida na inversão de controle, ela é apenas um tipo de inversão de controle, assim como o padrão Strategy.

erhm… sim, isso eu sei… mas vc respondeu a questão sem querer, então, correto falar que ‘um substitui o outro’

O dependency injection é uma forma específica de inversão de controle, que normalmente é aplicada sobre classes que usam o padrão Strategy.
O que muda na injeção de controle é o fato de que você injeta uma dependência externa.

Ou seja, nem a implementação das estratégias, e nem a decisão de que estratégia usar em cada situação estarão no seu código, mas sim num arquivo externo.

Existem casos em que a decisão de qual estratégia usar também é uma estratégia, pois depende de informações disponíveis na execução do caso de uso.

Exemplo típico: cálculo do custo do frete em uma venda, onde o usuário pode selecionar um dentre vários mecanismos de envio, possivelmente envolvendo empresas de logística diferentes. O cálculo é uma interface com um método que recebe os dados do pedido (lista de itens, local de entrega, meio de pagamento, etc) e retorna o valor do frete.

Acho que uma forma de tentar deixar isto mais claro é ter em vista que o IoC está mais para um princípio geral, enquanto o Strategy é um padrão específico a aplicar em situações em que determinado algorítmo de pode possuir múltiplas implementações.

Não sei se ajudou…