Padrão Abstract Factory Projeto de Sistemas de Software Hazel Carvalho Crato.

21
Padrão Abstract Factory Projeto de Sistemas de Software Hazel Carvalho Crato

Transcript of Padrão Abstract Factory Projeto de Sistemas de Software Hazel Carvalho Crato.

Page 1: Padrão Abstract Factory Projeto de Sistemas de Software Hazel Carvalho Crato.

Padrão Abstract Factory

Projeto de Sistemas de Software

Hazel Carvalho Crato

Page 2: Padrão Abstract Factory Projeto de Sistemas de Software Hazel Carvalho Crato.

© LES/PUC-Rio

Sumário

• Abstract Factory

– Propósito

– Motivação

– Aplicabilidade

– Estrutura

– Participantes

– Colaborações

– Conseqüências

– Exemplo de Código

Page 3: Padrão Abstract Factory Projeto de Sistemas de Software Hazel Carvalho Crato.

© LES/PUC-Rio

Abstract Factory

• É classificado como um padrão de criação, também conhecido como Kit.

• Propósito

– Prover uma interface para criar famílias de objetos relacionados ou dependentes sem especificar suas classes concretas.

Page 4: Padrão Abstract Factory Projeto de Sistemas de Software Hazel Carvalho Crato.

© LES/PUC-Rio

Motivação

Exemplo 1:

Page 5: Padrão Abstract Factory Projeto de Sistemas de Software Hazel Carvalho Crato.

© LES/PUC-Rio

Motivação

Exemplo 2:

Page 6: Padrão Abstract Factory Projeto de Sistemas de Software Hazel Carvalho Crato.

© LES/PUC-Rio

Motivação

• Diferentes padrões look-and-feel definem diferentes aparências (look) e comportamentos (feel) para um widget de uma interface de usuário. Exemplos: barras de rolagem, janelas, botões etc.

• Para ser portável através dos padrões look-and-feel, uma aplicação não deve instanciar os widgets diretamente de suas classes concretas para uma aparência ou comportamento particular.

• Para facilitar a alteração da aparência e do comportamento futuramente, defina uma classe abstrata GUIFactory que declara uma interface para criar cada tipo de widget básico.

• Defina ainda uma interface para cada tipo de widget e subclasses concretas que implementam widgets para um específico padrão look-and-feel.

Page 7: Padrão Abstract Factory Projeto de Sistemas de Software Hazel Carvalho Crato.

© LES/PUC-Rio

Motivação

• A interface de GUIFactory possui uma operação que retorna um novo widget concreto para cada widget abstrato.

• Há uma sub-classe concreta de GUIFactory para cada padrão look-and-feel.

• Cada sub-classe implementa as operações para criar o widget apropriado para o respectivo look-and-feel.

• Clientes criam os widgets apenas através da GUIFactory sem saber quem são widgets concretos para um específico look-and-feel.

• Uma GUIFactory reforça as dependências entre as classes concretas de widgets.

Page 8: Padrão Abstract Factory Projeto de Sistemas de Software Hazel Carvalho Crato.

© LES/PUC-Rio

Aplicabilidade

• O padrão deve ser usado quando:

– Um sistema deve ser implementado independente de como os produtos são criados, compostos e representados.

– Um sistema deve ser configurado com uma das múltiplas famílias de produtos.

– Uma familia de um produto relacionado é projetada para ser utilizada junta, e faz-se necessário o reforço dessa restriçao.

– Deseja-se prover uma biblioteca de classes de produtos e deseja-se revelar apenas as suas interfaces, mas não suas implementações.

Page 9: Padrão Abstract Factory Projeto de Sistemas de Software Hazel Carvalho Crato.

© LES/PUC-Rio

Estrutura

Page 10: Padrão Abstract Factory Projeto de Sistemas de Software Hazel Carvalho Crato.

© LES/PUC-Rio

Participantes

• AbstractFactory – Declara uma interface para operações que criam produtos

abstratos.

• ConcreteFactory – Implementa as operações para criar produtos concretos.

• AbstractProduct – Declara uma interface para um tipo de produto.

• ConcreteProduct – Define um produto a ser criado pela fábrica concreta

correspondente.

– Implementa a interface AbstractProduct.

• Client – Usa apenas interfaces declaradas pelas classes AbstractFactory

e AbstractProduct.

Page 11: Padrão Abstract Factory Projeto de Sistemas de Software Hazel Carvalho Crato.

© LES/PUC-Rio

Colaborações

• Normalmente uma única instância da classe ConcreteFactory é criada em tempo de execução.

• AbstractFactory delega a criação de produtos concretos para a respectiva subclasse ConcreteFactory.

• A classe ConcreteFactory cria produtos que possuem uma implementação particular, por exemplo: todos os widgets de uma WinFactory concreta.

Page 12: Padrão Abstract Factory Projeto de Sistemas de Software Hazel Carvalho Crato.

© LES/PUC-Rio

Conseqüências

• Vantagens

– Abstract Factory isola classes concretas.

– Facilita o intercâmbio de famílias de produtos.

– Promove consistência entre produtos.

• Desvantagem

– Suporte a novos tipos de produtos é dicífil.

Page 13: Padrão Abstract Factory Projeto de Sistemas de Software Hazel Carvalho Crato.

Exemplo de Código

Page 14: Padrão Abstract Factory Projeto de Sistemas de Software Hazel Carvalho Crato.

© LES/PUC-Rio

Estrutura

Page 15: Padrão Abstract Factory Projeto de Sistemas de Software Hazel Carvalho Crato.

© LES/PUC-Rio

Abstract Factory

Page 16: Padrão Abstract Factory Projeto de Sistemas de Software Hazel Carvalho Crato.

© LES/PUC-Rio

Concrete Factory

Page 17: Padrão Abstract Factory Projeto de Sistemas de Software Hazel Carvalho Crato.

© LES/PUC-Rio

Abstract Product

Page 18: Padrão Abstract Factory Projeto de Sistemas de Software Hazel Carvalho Crato.

© LES/PUC-Rio

Concrete Product

Page 19: Padrão Abstract Factory Projeto de Sistemas de Software Hazel Carvalho Crato.

© LES/PUC-Rio

Transfer Object

Page 20: Padrão Abstract Factory Projeto de Sistemas de Software Hazel Carvalho Crato.

© LES/PUC-Rio

Client

Page 21: Padrão Abstract Factory Projeto de Sistemas de Software Hazel Carvalho Crato.

Perguntas?