Tenho uma classe Pedido, e nesse pedido vai ter um Cliente e um Funcionario vinculados, os atributos de Cliente e Funcionario são iguais, com exceção que Funcionario possui ‘login’ e ‘senha’, e na classe Endereco eu colocaria 2 composições(Cliente cliente, Funcionario func) ? pois funcionario tem um endereco e cliente tbm tem um endereco…e o certo seria um endereço ter um cliente ou um funcionario.
(EDIÇÃO)
Assim se encaixaria? fiz um enum de perfis pra controlar com o Spring Security
public class Usuario{
private Long id;
private String username;
private String senha;
private Set<Perfil> perfis;
}
public enum Perfil{
ADMIN, GARCOM, CLIENTE
}
public Pedido {
private Usuario funcionario;
private Usuario cliente;
}
Não. Cliente e Funcionario são entidades com histórias totalmente independentes. No mínimo ficariam em módulos bem separados, ou como ocorre na maioria das empresas, em sistemas separados, sob gestões diferentes. Não acople as coisas só porque a estrutura de dados tem algo em comum.
A resposta já está no questionamento: Funcionario tem um atributo do tipo Endereco e Cliente também tem um atributo do tipo Endereco.
Não vejo necessidade de usar herança, mas se quiser realmente utilizar, crie uma classe abstrata Pessoa, com os atributos comuns para ambos, como por exemplo o endereco. Cliente estende Pessoa. Funcionario também estende Pessoa e define ainda os atributos login e senha.
Se o requisito for: um Cliente pode ter um ou mais endereços, entao crie ClienteEndereco ou EnderecoCliente, como quiser, mas sem misturar com Funcionario.
O mesmo para Funcionário (FuncionarioEndereco), se realmente precisar de vários endereços, caso contrário coloca o endereço direto em Funcionario.