A minha duvida é em saber se esta correto fazer o seguinte, tenho um cadastro de cliente e neste cadastro tenho o endereco dele, endereco de entrega e endereço de cobrança, ai fiz o seguinte:
public class Endereco {
private String endereco;
private String numero;
private String bairro;
/// aqui os gets e sets
}
public class Cliente {
private int codigoID;
private int codigo;
private String cNome;
private Endereco endereco;
private Endereco cobranca;
private Endereco entrega;
/// aqui os gets e sets
}
Isso é correto, tem algum prejuízo em desempenho ?
Seguindo a ideia do @Weverton_Reis eu faria da seguinte forma:
public class Endereco {
private String endereco;
private String numero;
private String bairro;
/**************************************
Forma simples de diferenciar:
* 0 = endereço normal
* 1 = endereço de entrega
* 2 = endereço de cobrança
**************************************/
private int tipo_do_endereco;
//gets e sets
}
ai o cliente seria:
public class Cliente {
private int codigoID;
private int codigo;
private String cNome;
/*Lista de endereco*/
private List<Endereco> enderecos;
public Cliente() {
this.enderecos = new ArrayList<>();
}
public List<Endereco> getEnderecos(){
return this.enderecos;
}
//gets e sets dos demais
}
ai no main principal faria algo desse tipo:
public static void main(String[] args) {
Cliente cliente = new Cliente();
/*método que retorna o tipo do endereco*/
int tipo_do_endereco = cliente.getEnderecos().get(0).getTipo_do_endereco();
}
eu também faria isso só para deixar explícito:
public class Endereco {
private String endereco;
private String numero;
private String bairro;
public static final int NORMAL = 0;
public static final int ENTREGA = 1;
public static final int COBRANCA = 2;
private int tipo_do_endereco;
//gets e sets
}
e poderia fazer algo assim:
public static void main(String[] args) {
Cliente cliente = new Cliente();
/*método que retorna o tipo do endereco*/
int tipo_do_endereco = cliente.getEnderecos().get(0).getTipo_do_endereco();
if (tipo_do_endereco == Endereco.ENTREGA) {
//então é o endereço de entrega
}
}
A vantagem de usar essa forma abaixo, é o fato de criar objetos com cada tipo de endereço, que no caso são: endereço do cliente, endereco de entrega e endereço de cobrança.
/*Como Endereco é uma classe abstrato(abstract) não poderá
criar objetos com ela, só com
as outras classes que à estedem
public class abstract Endereco{
private String endereco;
*/
public class abstract Endereco{
String endereco; // Essa variávem conterá em todas as classes que estendê-la
Endereco(String endereco){ //Construtor para a classe
this.endereco = endereco;
}
}
//
// Assim criará um obj para cada tipo de endereço
public class extends EnderecoDoCliente{
EnderecoDoCliente(String endereco){
super(endereco); // coloque o endereço da entrega do cliente
}
//corpo da classe (resto do código abaixo)
}
//
public class extends EnderecoEntrega{
EnderecoEntrega(String endereco){
super(endereco); // coloque o endereço da entrega
//corpo da classe (resto do código abaixo)
}
}
//
public class extends EnderecoCobranca{
EnderecoCobranca(String endereco){
super(endereco); // coloque o endereço da cobrança
//corpo da classe (resto do código abaixo)
}
}