Abstract Factory Pattern Algumas aplicações precisam criar objetos de classes que podem mudar ex: elementos de um sistema GUI. –Diferentes padrões precisam de objetos de classes diferentes (motif, presentation manager, etc.) –uma classe para cada objeto visivel, para cada padrão.
Solução: Criar “Fábrica Abstrata”, com métodos para a criação de cada componente. Criar “Componente Abstrato”, com métodos do componente Fábricas concretas retornam elementos dos componentes concretos –FabricaComponentesPM, FabricaComponentesMotif –JanelaPM, JanelaMotif, BarraRolamentoPM, BarraRolamentoMotif
Aplicabilidade sistema precisa ser independente de como seus produtos são criados, compostos e representados configuração do sistema envolve a escolha de uma entre várias famílias de produtos uma família de produtos foi criada para ser usada em conjunto, e queremos reforçar isso desenvolvedor quer criar uma biblioteca de classe de produtos, mas quer revelar apenas as interfaces.
Estrutura
Participantes Fábrica Abstrata: determina interface de criação dos produtos Fábrica Concreta: responsável pela implementação da criação de objetos concretos Produto Abstrato: define interface do produto Produto Concreto: define produto a ser criado, implementa interface do produto abstrato Cliente: utiliza interface definida pelos componentes abstratos do padrão.
Consequências +isolamento das classes concretas +facilita implementação e troca de famílias de produtos +promove consistencia entre produtos da mesma família –dificulta adicionar novos produtos: precisamos aumentar interface da fábrica abstrata e de todas as suas sublcasses concretas.
Tornando o padrão mais geral: fábricas extensíveis associar a cada produto um código (número, string, etc.) apenas uma operação de criação de produtos, parametrizada pelo código problema: objetos retornados são vistos como tendo mesma interface em Java