Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Dúvida Design Patters

Marcos, seguindo os exemplos desta aula, eu faria o seguinte:

public abstract class TemplateInvestimento implements Investimento {

@Override public double calcula(Conta conta) { if(temMaximoRendimento()){ return maximoInvestimento(conta); }

return minimoInvestimento(conta); }

protected abstract boolean temMaximoRendimento(); protected abstract double maximoInvestimento(Conta conta); protected abstract double minimoInvestimento(Conta conta);

}

public class InverstimentoConservador extends TemplateInvestimento{

@Override protected boolean temMaximoRendimento() { return geraNumero() == 0; }

@Override protected double maximoInvestimento(Conta conta) { return conta.getSaldo() * 0.007; }

@Override protected double minimoInvestimento(Conta conta) { return conta.getSaldo() * 0.002; }

private int geraNumero(){ Random random = new Random(); return random.nextInt(2); } }

public class RealizadorDeInvestimentos {

public void calculaInvestimentoConta(Conta conta, Investimento investimento){ double resultado = investimento.calcula(conta);

conta.credita(resultado * 0.75); }}

Basicamente fiz com que a classe InverstimentoConservador que havíamos utilizado na aula anterior utilizasse um tamplate com os métodos de aplicação das taxas máxima e mínima (como utilizado no exemplo desta aula).

2 respostas
solução

Olá Marcos, tenho algumas sugestões:

1 - Para aprimorar a legibilidade do código você poderia criar constantes que deêm um nome significativo aos valores: 0.007, 0.002 e 0.75.

2 - No método #geraNumero o else é desnecessário, já que você possui apenas duas condições para executar o retorno do método.

3 - #geraNumero poderia ser renomeado para algo que expressa-se melhor seu comportamento.

4 - Extrair um método que devolva a porcentagem a qual o saldo será multiplicado.

Sua solução está simples, e na minha visão isso é algo bom. Outra sugestão é dar uma olhada na sugestão do Rafael Vital que ficou interessante.

Ficou bom ? Apenas um teste!


package br.com.marcos.teste;

import java.util.Random;


public class Conservador {

    public void calcula(Conta conta) {

        double valor = 0;

        if (geraNumero()) {

            valor = conta.getSaldo() * 0.007;

        } else {

            valor = conta.getSaldo() * 0.002;
        }

        conta.deposita(valor * 0.75);

    }

    private boolean geraNumero() {

        Random random = new Random();

        int numeroGerado = random.nextInt(2);

        if (numeroGerado == 0) {
            return true;
        } else {

            return false;
        }
    }

}