Muito interessante, mas fiquei com dúvida em como que exatamente os ifs aninhados vão ser eliminados, pois, ainda assim na função main
do seu código é necessário passar o Objeto que será referente a qual transportadora eu irei usar e é exatamente ai que entra minha dúvida, pois vejo que ainda seria necessário um if para saber qual transportadora que será enviada para a classe de contexto, por exemplo:
TransportationContext transportationContext = null;
if(type == "DHL") {
transportationContext = new(new DHL());
} ...
Dando uma olhada no Refactoring Guru o exemplo de pseudocódigo que é usado faz exatamente isso que mostrei acima, portanto, mesmo após o uso do Strategy a classe ainda continuaria violando o OCP (Open Closed Principle), pois caso tivesse uma nova transportadora teria que modificar minha classe e adicionar uma condição para ela.