Olá pessoal, boa tarde! Terminei a formação Java e Orientação a Objetos, e estou refatorando o código do bytebank com os conhecimentos adquiridos. Uma das mudanças que estou fazendo é a substituição do double
para BigDecimal
. Fiz as mudanças e notei que toda vez que vou fazer algum deposito, saque ou transferência, tenho que instanciar um novo BigDecimal, o que acaba deixando meio repetitivo por meio do new BigDecimal(valor)
. Segue o código:
package br.com.bytebank.banco.modelo;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* Classe que representa a moldura de uma conta
*
* @autor João Gabriel
*/
public abstract class Conta implements Comparable<Conta>, Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private transient Cliente titular;
private int agencia;
private int numero;
protected BigDecimal saldo = new BigDecimal("00.00");
private static int contador;
public Conta(int agencia, int numero) {
/**
* Construtor para inicializar o objeto a partir da agencia e numero
*
* @param agencia
* @param numero
*/
this.agencia = agencia;
this.numero = numero;
if (agencia < 1) {
throw new IllegalArgumentException("Numero inválido.");
}
if (numero < 1) {
throw new IllegalArgumentException("Número inválido.");
}
Conta.contador++;
System.out.println("Total de contas criadas: " + Conta.contador + ".");
}
public void setTitular(Cliente titular) {
this.titular = titular;
}
public Cliente getTitular() {
return this.titular;
}
public void setAgencia(int agencia) {
this.agencia = agencia;
}
public int getAgencia() {
return this.agencia;
}
public void setNumero(int numero) {
this.numero = numero;
}
public int getNumero() {
return this.numero;
}
public BigDecimal getSaldo() {
return this.saldo;
}
/**
*
* @param valor
* @throws SaldoInsuficienteException
*/
public void saca(BigDecimal valor) throws SaldoInsuficienteException {
if (this.saldo.compareTo(valor) < 0) {
throw new SaldoInsuficienteException(
"Operação não realizada. Saldo insuficiente. Valor disponível: R$ " + this.saldo + ".");
} else {
this.saldo = this.saldo.subtract(valor);
}
}
public abstract void deposita(BigDecimal valor);
public void transfere(BigDecimal valor, Conta destino) throws SaldoInsuficienteException {
saca(valor);
destino.saldo = destino.saldo.add(valor);
}
public void ImprimeSaldo() {
System.out.println("Saldo: R$ " + this.saldo);
}
@Override
public boolean equals(Object ref) {
Conta outra = (Conta) ref;
if (this.agencia == outra.agencia && this.numero == outra.numero) {
return true;
}
return false;
}
@Override
public int compareTo(Conta outra) {
return this.saldo.compareTo(outra.saldo);
}
@Override
public String toString() {
return "Titular: " + this.getTitular().getNome() + ", Agencia: " + this.agencia + " Número: " + this.numero + ", Saldo: " + this.saldo;
}
}
package br.com.bytebank.banco.modelo;
import java.math.BigDecimal;
public class ContaCorrente extends Conta implements Tributavel {
private transient CalculadorImposto calculador;
public ContaCorrente(int agencia, int numero) {
super(agencia, numero);
calculador = new CalculadorImposto();
}
@Override
public void saca(BigDecimal valor) throws SaldoInsuficienteException {
BigDecimal valorASacar = valor.add(new BigDecimal("0.2"));
super.saca(valorASacar);
}
@Override
public void deposita(BigDecimal valor) {
super.saldo = super.saldo.add(valor);
}
@Override
public BigDecimal getValorImposto() {
return this.calculador.getValorImposto(super.saldo);
}
@Override
public String toString() {
return "Conta Corrente, " + super.toString();
}
}
package br.com.bytebank.banco.modelo;
import java.math.BigDecimal;
public class ContaPoupanca extends Conta {
/**
*
*/
private static final long serialVersionUID = 1L;
public ContaPoupanca(int agencia, int numero) {
super(agencia, numero);
}
@Override
public void deposita(BigDecimal valor) {
super.saldo = super.saldo.add(valor);
}
@Override
public String toString() {
return "Conta Poupança, " + super.toString();
}
}
Continua nos comentários ---->