Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] 04 Refactoring e Strategy Pattern

Considerando o Strategy Pattern aplicado nesse exemplo do curso

package br.com.alura.tdd.modelo;

import java.math.BigDecimal;

public enum Desempenho {
    /*
     * Impl do curso , para cada novo enum, exige a impl do metodo abstrato de forma concreta

     *E por que vamos usar um método abstrato? 
     *Porque, com um método abstrato, cada constante é obrigada a fornecer uma implementação. 
     */
    A_DESEJAR {
        @Override
        public BigDecimal getPercentualDeAumentoSalarial() {
            return new BigDecimal("0.03");
        }
    },
    BOM {
        @Override
        public BigDecimal getPercentualDeAumentoSalarial() {
            return new BigDecimal("0.15");
        }
    },
    OTIMO {
        @Override
        public BigDecimal getPercentualDeAumentoSalarial() {
            return new BigDecimal("0.20");
        }
    };

    public abstract BigDecimal getPercentualDeAumentoSalarial();

}

Apliquei uma outra abordagem, que surtiu o mesmo efeito, qual padrao poderia descreve-la ? Visto que estou delegando a tarefa para o construtor.

package br.com.alura.tdd.modelo;

import java.math.BigDecimal;

public enum Desempenho {

    /*
     * 
     * Minha impl, vai aplicar o valor do percentual ao construtor do objeto, conforme a chamada a constante.
     * 
     * Ou seja para cada nova constante criada, obriga informar o valor por argumento para o construtor 
     *
     * apos, a cada chamada tera um objeto com o atributo.
     * 
     * 
     */
    A_DESEJAR(new BigDecimal("0.03")),
    BOM(new BigDecimal("0.15")),
    OTIMO(new BigDecimal("0.20"));

    private BigDecimal percentual;

    Desempenho(BigDecimal percentual) { this.percentual = percentual; }

    public BigDecimal getPercentualDeAumentoSalarial() { return this.percentual; }

}
2 respostas
solução!

Oi Eduardo,

Continua sendo o mesmo padrão, mudando apenas a forma de implementar. Daria para implementar também utilizando uma interface, ou seja, não tem apenas uma única forma ;)

Bons estudos!

Oi Rodrigo, Claro, o enum iria implementar o metodo abstrato definido na interface, e no fim ao invocar um enum, o objeto seria criado e o metodo concreto invocado na service.

Entendi, obrigado por esclarecer :)