Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Strategy

import java.util.Random;

public class Conta {

private double saldo;

public Conta(double saldo) {
    this.saldo = saldo;
}

public double getSaldo() {
    return saldo;
}

public void deposita( double valor ) {
    this.saldo += valor;
}

}

class RealizaInvestimento {

public double invetir( Conta saldoInvestir, Investimento tipoInvestimento ) {
    return tipoInvestimento.investe(saldoInvestir);
}

public double abateImpostos( Double valor ) {
    double desconto = valor * 0.25;
    return valor - desconto;
}

public void adicionaRetornoInvestimento( Conta conta, double valor ) {
    conta.deposita(valor);
}

}

interface Investimento {

double investe( Conta conta );

}

class InvestimentoConservador implements Investimento {

@Override
public double investe( Conta conta ) {
    return conta.getSaldo() * 0.008;
}

}

class InvestimentoModerado implements Investimento {

@Override
public double investe( Conta conta ) {
    boolean maiorQue50 = new java.util.Random().nextDouble() > 0.50;
    if ( maiorQue50 ) {
        return conta.getSaldo() * 0.25;
    }
    return conta.getSaldo() * 0.007;
}

}

class InvestimentoArrojado implements Investimento {

@Override
public double investe(Conta conta) {
    double chance = new java.util.Random().nextDouble();
    if ( chance <= 0.20 ) {
        return conta.getSaldo() * 0.05;
    } else if ( chance <= 0.30 ) {
        return conta.getSaldo() * 0.03;
    }
    return conta.getSaldo() * 0.06;
}

}

class TestaInvestimento {

public static void main(String[] args) {

    Conta conta = new Conta( 2000.00 );
    Conta conta2 = new Conta( 2000.00 );
    Conta conta3 = new Conta( 2000.00 );


    InvestimentoConservador conservador = new InvestimentoConservador();
    InvestimentoModerado moderado = new InvestimentoModerado();
    InvestimentoArrojado arrojado = new InvestimentoArrojado();

    RealizaInvestimento realizaInvestimento = new RealizaInvestimento();

    double investimento1 = realizaInvestimento.invetir( conta, conservador );
    double investimento2 = realizaInvestimento.invetir( conta2, moderado );
    double investimento3 = realizaInvestimento.invetir( conta3, arrojado );

    double valorInvestimento1 = realizaInvestimento.abateImpostos(investimento1);
    double valorInvestimento2 = realizaInvestimento.abateImpostos(investimento2);
    double valorInvestimento3 = realizaInvestimento.abateImpostos(investimento3);

    System.out.println("Sem investimento: " + conta.getSaldo());
    realizaInvestimento.adicionaRetornoInvestimento( conta ,valorInvestimento1 );
    System.out.println("Investimento 1 - conservador: " + conta.getSaldo());
    realizaInvestimento.adicionaRetornoInvestimento( conta2 ,valorInvestimento2 );
    System.out.println("Investimento 2 - moderado: " + conta2.getSaldo() );
    realizaInvestimento.adicionaRetornoInvestimento( conta3 ,valorInvestimento3 );
    System.out.println("Investimento 3 - arrojado: " + conta3.getSaldo());

}

}

1 resposta
solução!

Perfeito Lucas