Oi Ramiro, beleza?
No caso dos descontos, por que não usarmos métodos no lugar de novas classes, to pensando na quantidade de classes que qualquer sistema teria.
Pense o inverso, na bagunça que seria uma infinidade métodos definidos em uma única classe e o quão ruim seria realizar uma modificação nessa classe com a possibilidade de quebrar várias outras coisas. Uma classe que pode ter modificações indefinidamente fere o principio de Aberto e Fechado, onde as classes devem ser fechadas para modificações e abertas para extensões.
Ainda nos descontos para quem faz a manutenção terá de encontrar toda essa cadeia para entender e fazer a manutenção.
Com o chain of responsability fica muito mais fácil por que você não terá que modificar muito em código já feito. Basta criar uma nova classe com a nova funcionalidade e adiciona-la na cadeia.