Pelo que entendi, cada if() é transformado em um objeto até que chama o objeto SemDesconto que seria equivalente ao else.
O strategy, por sua vez, tá mais relacionado com um 'if' orientado a objetos, pois não conecta o um 'objeto if' com outro 'objeto if' como é feito no if-else da chain.
É seguro (e saudável hehe) usar essa abstração para entender ambos patterns?
if(for seguro) { .... } else if (for segudo mas....) {} else if(for seguro mas...) else if(total loucura) else {}
class AbstracaoSegura class AbstracaoSeguraMasPrecisaTer... class AbstracaoSeguroMas... class AbstracaoMaluca class AbstracaoIncorreta
var abstracao = new Abstrai(new AbstracaoSegura( new AbstracaoSeguraMasPre..)
Enfim, deixando de lado a brincadeira, posso abstrair assim?
PS: minha mente pensa de maneira muito imperativa (sou exprogramador C e Assembly)...