Dúvida sobre Abstract Factory

[quote=rlanhellas]Verdade, nem sempre vou usar apenas Pessoa, na verdade são raras as vezes que vou usar Pessoa, vou utilizar mais : PessoaJuridica, Dentista ou Funcionario.

Mas não deixarei a classe PessoaFisica e Pessoa como abstrata pois poderemos utilizar ela em alguma parte da aplicação.[/quote]

Pois é, então não tem sentido em você abstrair a criação desses objetos. Por exemplo, se você tiver uma tela “Cadastro de Dentista”, é mais simples e elegante chamar new Dentista() logo de uma vez e setar os campos apropriados. Do contrário, você teria que chamar a fábrica, chamar o getPessoa(TipoPessoa.DENTISTA) e ao receber o objeto você teria que fazer um cast Dentista d = (Dentista) pesssoa;

Entedi. Não precisamos do Abstract Factory.

Mas fiquei na dúvida sobre a modelagem:

1ª Opção - Classe PessoaFisica extends Pessoa. Sendo que pessoa fisica terá os atributos de Dentista e Funcionario, com um discriminator para dizer se é D (dentista) ou F (FUncionario). Sendo uma tabela pessoa_fisica

2 ª - Opcao - Classe PEssoaFisica extends Pessoa. Funcionario extends PessoaFisica e Dentista extends PessoaFisica. Sendo uma tabela para Dentista e outra para Funcionario.

[quote=rlanhellas]Entedi. Não precisamos do Abstract Factory.

Mas fiquei na dúvida sobre a modelagem:

1ª Opção - Classe PessoaFisica extends Pessoa. Sendo que pessoa fisica terá os atributos de Dentista e Funcionario, com um discriminator para dizer se é D (dentista) ou F (FUncionario). Sendo uma tabela pessoa_fisica

2 ª - Opcao - Classe PEssoaFisica extends Pessoa. Funcionario extends PessoaFisica e Dentista extends PessoaFisica. Sendo uma tabela para Dentista e outra para Funcionario.[/quote]

Eu apostaria na 2a opção sem dúvida. Mas ao invés de usar herança eu usaria composição, do tipo Funcionario TEM-UMA PessoaFisica e Dentista TEM-UMA PessoaFisica. Pode soar estranho mas faz sentido.

Porque composição ? Não entendi a relação;