1
resposta

Decorator gigante

Fiz o seguinte código:

    @PostMapping("/gasolina/carro_caminhao/{km}")
    @Produces(MediaType.APPLICATION_XML)
    public String calculaGasolinaDecorator(@PathVariable long km) {
        Veiculo veiculo = new Caminhao(new Carro());
        return "<gasolina>"+CalculadorStrategy.calculaGasolina(veiculo, km)+"</gasolina>";
    }

Existe alguma forma de fazer isso abaixo?

    @PostMapping("/gasolina/{qtd_carros}/carro/[qtd_caminhao}/caminhao/{km}")
    @Produces(MediaType.APPLICATION_XML)
    public String calculaGasolinaDecorator(@PathVariable long qtd_carros, @PathVariable long qtd_caminhao, @PathVariable long km) {
        Veiculo veiculo = << junção de carros e caminhoes com decorator >>;
        return "<gasolina>"+CalculadorStrategy.calculaGasolina(veiculo), km)+"</gasolina>";
    }

O que iria no lugar do texto que está no código?

1 resposta

Oi Edson, tudo bem? Não sei se faz sentido o decorator neste caso, me parece fazer mais sentido algo como polimorfismo com uso de interface veículo mesmo. Não seria mais simples?

Toda implementação de veículo tem sua regra de cálculo e você passa uma lista de veículos para o calculaGasolina que faz um simples foreach e te retorna os dados. Por que você precisaria de um Decorator neste caso?