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).