ABSTRACT FACTORY      Alan O. De Sousa      Rafael B. Cabral
O que é o Abstract Factory?• O Abstract Factory é um padrão de projeto  semelhante ao Factory Method ;• O Factory Method q...
Diagrama de Classes
Exemplo de Código Abstract Factory//abstract factoryabstract AbstractFactory{         public abstractBotao criarBotao();  ...
//concrete factoryclass MetalFactory extends AbstractFactory{         publicBotao criarBotao()         {                 r...
//product class BotaoMotif extends Botao {    public void desenhar() {      System.out.println("Eu sou um botao Motif!"); ...
//product class JanelaMotif extends Janela {    public void desenhar() {      System.out.println("Eu sou uma janela Motif!...
//Client public class Cliente {    public static void main(String[] args)    {       AbstractFactory factory = obterFactor...
EXEMPLOS:
EXEMPLOS:
Quando Usar ?• O sistema deve ser independente de como seus  produtos são criados, compostos e representados;• O sistema d...
Quando Usar ?• Deseja-se criar instâncias de um conjunto de classes  relacionadas, sem que se saiba qual classe factory  c...
Vantagens:• AbstractFactory delega a criação de  objetos-produto a suas subclasses  ConcreteFactory;• Normalmente uma únic...
Desvantagens:• Isola classes concretas• Dificulta o suporte a novos tipos de  produtos
}
Próximos SlideShares
Carregando em…5
×

Abstract

194 visualizações

Publicada em

0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
194
No SlideShare
0
A partir de incorporações
0
Número de incorporações
2
Ações
Compartilhamentos
0
Downloads
2
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Abstract

  1. 1. ABSTRACT FACTORY Alan O. De Sousa Rafael B. Cabral
  2. 2. O que é o Abstract Factory?• O Abstract Factory é um padrão de projeto semelhante ao Factory Method ;• O Factory Method quer que você seja diferente (via herança) para criar objetos diferentes, o Abstract Factory quer que você tenha algo diferente.• Abstract Factory permite satisfazer a restrição de criar apenas objetos relacionados ou dependentes
  3. 3. Diagrama de Classes
  4. 4. Exemplo de Código Abstract Factory//abstract factoryabstract AbstractFactory{ public abstractBotao criarBotao(); public abstractJanela criarJanela();}//concrete factoryclass MotifFactory extends AbstractFactory{ public Botao criarBotao() { return newBotaoMotif(); } public Janela criarJanela() { return newJanelaMotif(); }}
  5. 5. //concrete factoryclass MetalFactory extends AbstractFactory{ publicBotao criarBotao() { return new BotaoMetal(); } publicJanela criarJanela() { return new JanelaMetal(); }}//abstract productabstract class Botao { public abstract void desenhar();}
  6. 6. //product class BotaoMotif extends Botao { public void desenhar() { System.out.println("Eu sou um botao Motif!"); } }//product class BotaoMetal extends Botao { public void desenhar() { System.out.println("Eu sou um botao do Metal!"); } }//abstract product abstract class Janela { public abstract void desenhar();}
  7. 7. //product class JanelaMotif extends Janela { public void desenhar() { System.out.println("Eu sou uma janela Motif!"); } }//product class JanelaMetal extends Janela { public void desenhar() { System.out.println("Eu sou uma janela Metal!"); }}
  8. 8. //Client public class Cliente { public static void main(String[] args) { AbstractFactory factory = obterFactory(1); Botao botao = factory.criarBotao(); botao.desenhar(); Janela janela = factory.criarJanela(); janela.desenhar(); } public static AbstractFactory obterFactory(int tipo) { if(tipo == 1 ) { return new MotifFactory(); } else { return new MetalFactory(); } }}
  9. 9. EXEMPLOS:
  10. 10. EXEMPLOS:
  11. 11. Quando Usar ?• 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
  12. 12. Quando Usar ?• Deseja-se criar instâncias de um conjunto de classes relacionadas, sem que se saiba qual classe factory concreta deve ser instanciada;• – Na falta de uma classe abstrata, o cliente deve manter um critério de seleção para selecionar qual das interfaces disponíveis deve ser usada, em tempo de execução;• – Ajuda a evitar duplicação de interfaces para criação das instâncias, eliminado a necessidade da classe cliente ter que conhecer diversas interfaces para as diversas classes concretas.
  13. 13. Vantagens:• 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.• Facilita a permuta de famílias de produtos• Promove consistência entre produtos
  14. 14. Desvantagens:• Isola classes concretas• Dificulta o suporte a novos tipos de produtos
  15. 15. }

×