Your SlideShare is downloading. ×
  • Like
Padrões-08 - Padrões Criacionais - Abstract Factory
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Padrões-08 - Padrões Criacionais - Abstract Factory

  • 3,690 views
Published

Padrões de Projeto. Padrão Criacional. Abstract Factory.

Padrões de Projeto. Padrão Criacional. Abstract Factory.

Published in Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
3,690
On SlideShare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
159
Comments
0
Likes
2

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Padrões de Projeto Padrões Criacionais Abstract Factory
  • 2. Abstract Factory •  Provê uma interface para criação de famílias de objetos relacionados ou dependentes sem especificar suas classes concretas •  Também conhecido como Kit 2 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 3. Motivação 3 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 4. Motivação •  Considere uma interface de usuário que suporte múltiplos look-and-feel. –  Para ser portável, uma aplicação não deveria se referir aos elementos (widgets) de um padrão particular de forma hard-code –  Solução: •  WidgetFactory – uma interface para criar cada tipo básico de elementos •  Uma classe abstrata para cada tipo de widget •  Uma subclasse concreta para cada padrão distinto •  Clientes usam a WidgetFactory e não têm conhecimento das classes que implementam widgets particulares •  WidgetFactory assegura também consistência entre classes 4 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 5. Aplicação •  Use Abstract Factory quando: –  O sistema deve ser independente de como seus produtos são criados, compostos e representados –  O sistema deve ser configurado com uma ou com múltiplas famílias de produtos –  Uma família de objetos de produtos relacionados é projetada para ser usada de forma conjunta e você deva garantir esta restrição –  Você quer prover uma biblioteca de classes de produtos e quer revelar apenas suas interfaces e não suas implementações 5 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 6. Estrutura 6 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 7. Participantes •  AbstractFactory (WidgetFactory) –  Declara uma interface para operações que criam objetos-produto abstratos •  ConcreteFactory (MotifWidgetFactory, PMWidgetFactory) –  Implementa as operações para criar objetos-produto concretos •  AbstractProduct (Window, ScrollBar) –  Declara uma interface para um tipo de objeto-produto 7 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 8. Participantes •  ConcreteProduct (MotifWindow, MotifScrollBar) – Define um objeto-produto a ser criado pela fábrica concreta correspondente – Implementa a interface AbstractProduct •  Cliente – Usa somente as interfaces declaradas pelas classes AbstractFactory e AbstractProduct 8 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 9. Colaborações •  AbstractFactory delega a criação de objetos-produto a suas subclasses ConcreteFactory. •  Normalmente uma única instância da classe ConcreteFactory é criada. Para criar objetos-produto diferentes, os clientes devem usar uma fábrica concreta diferente. 9 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 10. Conseqüências 1.  Isola classes concretas 2.  Facilita a permuta de famílias de produtos 3.  Promove consistência entre produtos 4.  Dificulta o suporte a novos tipos de produtos 10 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 11. Implementação •  Fábricas geralmente são melhor implementadas como Singletons •  AbstractFactory deve apenas declarar uma interface para a criação de produtos. É necessário haver uma fábrica concreta (eventualmente, uma para cada famíla de produtos) •  Definir fábricas “extensíveis” 11 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 12. Exemplo 12 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 13. Exemplo 13 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 14. Exemplo •  Para criar um labirinto com cômodos encantados, basta fazer subclasse de MazeFactory. 14 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 15. Exemplo 15 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 16. Exemplo •  Para criar um labirinto que contenha cômodos encantados, basta chamar CreateMaze com um EnchantedMazeFactory: MazeGame game; EnchantedMazeFactory factory; game.CreateMaze(factory); 16 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 17. Exemplo •  Agora, suponha que se queira fazer um labirinto no qual o cômodo pode ter uma bomba e a parede pode ser/estar danificada por ela. •  Deve-se fazer subclasses novamente, sobrescrevendo os dois métodos... 17 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 18. Exemplo 18 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 19. Exemplo •  Para criar um labirinto que contenha bombas, basta chamar CreateMaze com um BombedMazeFactory 19 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma
  • 20. Notas •  Note que MazeFactory é apenas uma coleção de métodos fábrica •  Note também que ela é tanto uma AbstractFactory como uma ConcreteFactory •  Se um RoomWithABomb tiver que acessar um membro de um BombedWall, então ele deveria fazer um cast da referência de Wall * para BombedWall * 20 Livro Texto: Design Pattern - Elements Eduardo N. F. Zagari of Reusable OO Software - Gamma