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());
}
}