SlideShare uma empresa Scribd logo
1 de 15
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 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
Diagrama de Classes
Exemplo de Código Abstract Factory
//abstract factory
abstract AbstractFactory
{
         public abstractBotao criarBotao();
         public abstractJanela criarJanela();
}
//concrete factory
class MotifFactory extends AbstractFactory
{
         public Botao criarBotao()
         {
                  return newBotaoMotif();
         }
         public Janela criarJanela()
         {
                  return newJanelaMotif();
         }
}
//concrete factory
class MetalFactory extends AbstractFactory{
         publicBotao criarBotao()         {
                 return new BotaoMetal();
         }
         publicJanela criarJanela() {
                 return new JanelaMetal();
         }
}
//abstract product
abstract class Botao {
         public abstract void desenhar();
}
//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();
}
//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!");
    }
}
//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();
       }
    }
}
EXEMPLOS:
EXEMPLOS:
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
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.
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
Desvantagens:
• Isola classes concretas
• Dificulta o suporte a novos tipos de
  produtos
}

Mais conteúdo relacionado

Semelhante a Abstract

Prototype1 - thiago
Prototype1 - thiagoPrototype1 - thiago
Prototype1 - thiago
tceufrasio1
 
Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)
Armando Daniel
 

Semelhante a Abstract (20)

Padroes de projetos gof
Padroes de projetos gofPadroes de projetos gof
Padroes de projetos gof
 
Prototype1 - thiago
Prototype1 - thiagoPrototype1 - thiago
Prototype1 - thiago
 
padrao de projeto3
padrao de projeto3padrao de projeto3
padrao de projeto3
 
padrao de projeto1
padrao de projeto1padrao de projeto1
padrao de projeto1
 
Programação Orientada a Objetos
Programação Orientada a ObjetosProgramação Orientada a Objetos
Programação Orientada a Objetos
 
Padroes de Projetos e aplicações- parte 01
Padroes de Projetos e aplicações- parte 01Padroes de Projetos e aplicações- parte 01
Padroes de Projetos e aplicações- parte 01
 
Prototype
PrototypePrototype
Prototype
 
Padroes de Projeto
Padroes de ProjetoPadroes de Projeto
Padroes de Projeto
 
Padrões de Projeto de Software Orientado a Objetos
Padrões de Projeto de Software Orientado a ObjetosPadrões de Projeto de Software Orientado a Objetos
Padrões de Projeto de Software Orientado a Objetos
 
GoF.ppt
GoF.pptGoF.ppt
GoF.ppt
 
Padrões de Projeto de Software Orientado a Objetos
Padrões de Projeto de Software Orientado a ObjetosPadrões de Projeto de Software Orientado a Objetos
Padrões de Projeto de Software Orientado a Objetos
 
Factory apresentacao
Factory   apresentacaoFactory   apresentacao
Factory apresentacao
 
Java7
Java7Java7
Java7
 
03 fundamentos java
03 fundamentos java03 fundamentos java
03 fundamentos java
 
Design Patterns (MSDN Webcast)
Design Patterns (MSDN Webcast)Design Patterns (MSDN Webcast)
Design Patterns (MSDN Webcast)
 
Fazendo Injeção de dependência com Unity 1.2
Fazendo Injeção de dependência com Unity 1.2Fazendo Injeção de dependência com Unity 1.2
Fazendo Injeção de dependência com Unity 1.2
 
Travalho versao final
Travalho versao finalTravalho versao final
Travalho versao final
 
Gof design patterns
Gof design patternsGof design patterns
Gof design patterns
 
Padrão de Projetos singleton
Padrão de Projetos singletonPadrão de Projetos singleton
Padrão de Projetos singleton
 
Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)
 

Abstract

  • 1. ABSTRACT FACTORY Alan O. De Sousa Rafael B. Cabral
  • 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
  • 4. Exemplo de Código Abstract Factory //abstract factory abstract AbstractFactory { public abstractBotao criarBotao(); public abstractJanela criarJanela(); } //concrete factory class MotifFactory extends AbstractFactory { public Botao criarBotao() { return newBotaoMotif(); } public Janela criarJanela() { return newJanelaMotif(); } }
  • 5. //concrete factory class MetalFactory extends AbstractFactory{ publicBotao criarBotao() { return new BotaoMetal(); } publicJanela criarJanela() { return new JanelaMetal(); } } //abstract product abstract class Botao { public abstract void desenhar(); }
  • 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. //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. //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(); } } }
  • 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. 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. 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. Desvantagens: • Isola classes concretas • Dificulta o suporte a novos tipos de produtos
  • 15. }