Estou com um problema na faculdade em egenharia de software e é o seguinte: Tenho o seguinte esquema ao efetuar o pagamento de um carrinho de compras devo saber se é BOLETO ou CARTÃO_DE_CREDITO Caso seja boleto eu gero um numero aleatório representando o código de barras, caso seja cartão de crédito eu recebo o numero do cartão e a quantidade de parcelas que o cliente desejar e calcular o valor de cada prestação (nesse caso o numero do cartão é alegórico).
Pensei em algo assim:
Pagamento.java
public interface Pagamento {
}
PagamentoBoleto.java
import java.util.Random;
public class PagamentoBoleto implements Pagamento{
private final int codigoDeBarra;
public PagamentoBoleto(final double valorCompra){
this.codigoDeBarra = gerarCodigoDeBarra(valorCompra);
}
private int gerarCodigoDeBarra(final double valorCompra){
long milisigundosAgora = System.currentTimeMillis();
long semente = (long) (valorCompra + milisigundosAgora);
Random random = new Random(semente);
int min = 1000;
int max = 9999;
return random.nextInt((max - min) + 1) + min;
}
}
PagamentoCartaoCredito.java
public class PagamentoCartaoCredito implements Pagamento{
private final String numeroCartaoCredito;
private final int quantidadeParcelas;
public PagamentoCartaoCredito(final String numeroCartaoCredito, final int quantidadeParcelas){
this.numeroCartaoCredito = numeroCartaoCredito;
this.quantidadeParcelas = quantidadeParcelas;
}
public double getValorParcela(double valorCompra) {
return valorCompra / quantidadeParcelas;
}
}
TipoPagamentoEnumFactory.java
public enum TipoPagamento {
CARTAO(1) {
public Pagamento getTipoPagamento() {
return new PagamentoCartaoCredito();
}
},
BOLETO(1) {
public Pagamento getTipoPagamento() {
return new PagamentoBoleto();
}
};
public int op;
TipoPagamento(int valor) {
op = valor;
}
public abstract Pagamento getTipoPagamento();
}
Problema … como as formas de pagamentos tem construtores distintos não sei como instância-los de forma bem dinâmica e flexivel.