Poderia cria uma interface TipoDeDesconto e conforme surgisse novas estratégias de desconto ela implementaria TipoDeDesconto.
public interface TipoDeDesconto {
Money getValor(Money subtotal);
}
public class CupomDeDesconto implements TipoDeDesconto {
@Override
public Money getValor(Money subtotal){
...
}
}
public class Fidelidade implements TipoDeDesconto {
@Override
public Money getValor(Money subtotal){
...
}
}