6
respostas

Dúvida Aula 02 Atividade 07 - Recebendo o próximo ítem da corrente pelo construtor

Não vejo saída para passar o próximo item da corrente pelo construtor. Se temos se e somente se 3 tipos de respostas e no momento de instanciarmos um objeto deste tipo, precisamos informar o próximo item da corrente, como iremos informar já que estamos instanciando o primeiro objeto da corrente? De acordo com o enunciado proposto vejo um problema sem resposta. Posso estar até enganado, mas de acordo com o enunciado, não vejo solução para o mesmo.

6 respostas

Fala aí Leonardo, blz?

Você pode ter uma sobrecarga do seu construtor, um recebendo o próximo item e um vazio, indicando que este é o inicial.

Espero ter ajudado.

Boa noite! Eu gostaria de aproveitar este tópico para dizer que não consegui entender o Chain Of Responsibility... Ele é bem parecido com Strategy ou eu misturei tudo.

Fala aí Paulo, blz? Então, são coisas distintas.

O strategy é utilizado quando você tem lógicas diferentes para um mesmo processo ou com uma assinatura em comum.

Por exemplo: Suponhamos que eu tenha vários tipos de promoção, e todas elas são baseada em uma compra.

Nesse caso eu poderia, criar uma interface com uma assinatura de método assim: void aplica( Compra compra).

E para cada tipo de promoção eu teria uma classe que implementa essa interface. Por exemplo podemos ter as seguintes classes: PromocaoMilionesiomoCliente, PromocaoDecimaCompra, PromocaoDiasDasMaese etc..

A regra para calcular a promoção fica em cada classe que implementa a interface Promocao.

Já o Chain of Responsibility, é usado quando temos que executar determinadas tarefas em cadeia.

Como o exemplo do desconto, que pode ser aplicado vários descontos em cadeia.

Boa noite Fernando!

Cara, obrigado pela explicação! Compreendi, mas vou precisar rever a aula para fixar melhor. Até mais!

Nesse caso só é possível começar instanciando em sequência inversa, ou seja, do último pro primeiro item dá corrente.

Pode encapsular isso dentro de uma static factory.

Oi Leonardo se temos uma cadeia de responsabilidades(mais de uma enão necessariamente só 3) faz sentido definir a primeira e a próxima, se tivermos uma responsabilidade que é a ultima da cadeia basta lançar uma exceção no caso de próximo ser null.


public class Porcento implements Resposta {
    Resposta outraResposta;

    public Porcento(Resposta outraResposta) {
        if(outraresposta==null){
        return new RuntimeException("");
}else{
        this.outraResposta = outraResposta;
    }

    @Override
    public void responde(Requisicao req, Conta conta) {
        if (req.getFormato() == Requisicao.Formato.PORCENTO) {
            System.out.println("%%%%%%");
        } else {
            this.outraResposta.responde(req, conta);
        }
    }
}

Espero ter ajudado e bons estudos.