Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouYuri Velez Alterado mais de 10 anos atrás
1
Abstract Factory Intenção: fornecer uma interface comum para a criação de famílias de objetos relacionados ou dependentes, sem especificar suas classes concretas. Solução: crie uma interface para representar uma fábrica para cada família de objetos. As subclasses concretas instanciam cada família específica.
2
Abstract Factory (estrutura)
3
Abstract Factory (participantes)
Fábrica Abstrata: declara uma interface para operações criam objetos-produto abstratos; Fábrica Concreta: implementa as operações para criar objetos-produto concretos; Produto Abstrato: declara uma interface para um tipo de objeto produto. Produto Concreto: implementa a interface abstrata de Produto Abstrato e define um objeto-produto a ser criado pela Fábrica Concreta correspondente. Cliente: utiliza apenas as interfaces declaradas por Fábrica Abstrata e Produto Abstrato.
4
Abstract Factory (conseqüências)
Isola classes concretas: uma vez que uma fábrica encapsula a responsabilidade e o processo de criação de objetos-produto, ela isola clientes das classes de implementação. Fica mais fácil a troca de uma família de produtos, bastando trocar a fábrica concreta usada pela aplicação. Promove consistência entre produtos. O suporte a novos tipos de produtos é dificultado, já que a interface definida em AbstractFactory fixa o conjunto de produtos que podem ser criados. O suporte a novos tipos de produtos é dificultado, já que a interface da Fábrica Abstrata fixa o conjunto de produtos que podem ser criados. Para dar suporte a novos tipos de produtos, é necessário alterar a interface da fábrica, o que envolve alterações na Fábrica Abstrata e em todas as suas subclasses. Promove consistência entre produtos. Quando objetos-produto em uma família são projetados para trabalhar juntos, é importante que uma aplicação utilize apenas objetos desta família.
5
Instanciação - Alocação de memória no heap/inicialização
Cliente > Fornecedor __________ serviços() Cliente > <<Interface>> ___________ servicos() <<Interface>> ___________ < X servicos() < Y < Z
6
Não dá a instanciação (new) no objeto cliente porque senão o cliente, que seria a classe criadora, teria que conhecer toda a implementação, o que deixaria muito alto o acoplamento, por isso se cria uma classe Criador. A operação metodoFabrica() serve para retornar um objeto específico da criação da classe Produto. O Cliente não conhece a classe ProdutoConcreto diretamente. Pode ser usado no caso do DAO. Um criador concreto só instancia objetos de uma classe, já no abstract factory, pode-se instanciar mais de uma classe.
7
Abstract Factory (aplicabilidade)
Este padrão é usado quando uma região de código deve ser independente de como os objetos que ela usa são criados, compostos e representados. Quando o sistema deve ser configurado com uma dentre várias famílias de produtos. É necessário fornecer uma biblioteca de classes, mas não é desejável revelar que produto particular está sendo usado. Quando uma família de produtos relacionados foi projetada para ser usada em conjunto, e esta restrição tem de ser garantida.
8
O problema do Linux é que eu poderia criar uma fábrica para botão, uma para combo box... seguindo o padrão acima, mas o cliente teria que conhecer todas elas. Por isso, deve-se criar com o abstract factory. A implementação do Abstract Factory usa a implementação do Factory Methos várias vezes. Para implementar as classes AbstractProductA ou AbstractProductB, tem que chamar a função create product A e create product B que se encontram na Abstract Factory e são implementados na Concrete Factory.
9
Abstract Factory (exemplo)
Exemplo: portabilidade entre bibliotecas GUI (Gnome e KDE).
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.