abstract factory n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Abstract Factory PowerPoint Presentation
Download Presentation
Abstract Factory

Loading in 2 Seconds...

play fullscreen
1 / 15

Abstract Factory - PowerPoint PPT Presentation


  • 74 Views
  • Uploaded on

Projeto de Sistemas de Software. Abstract Factory. Padr ões de projeto. Bruno Freitas Gadelha Setembro, 2008. Abstract Factory . Propósito Motivação Aplicabilidade Estrutura Participantes Colaborações Consequências Exemplo. Abstract Factory. Propósito

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Abstract Factory' - shaman


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
abstract factory

Projeto de Sistemas de Software

Abstract Factory

Padr ões de projeto

Bruno Freitas Gadelha

Setembro, 2008

abstract factory1
Abstract Factory
  • Propósito
  • Motivação
  • Aplicabilidade
  • Estrutura
  • Participantes
  • Colaborações
  • Consequências
  • Exemplo
abstract factory2
Abstract Factory
  • Propósito
    • Prover uma interface para criar uma família de objetos relacionados ou dependentes sem especificar suas classes concretas
abstract factory3
Abstract Factory
  • Motivação
    • Montadoras de carros
      • Diferentes modelos
        • Diferentes acessórios
    • Gerador de documentos
      • Diferentes documentos (textos, planilhas, apresentacoes)
        • Diferentes estilos de documentos (cartas de recomendação, curriculos, etc.)
abstract factory4
Abstract Factory
  • Aplicabilidade
    • Um sistema deve ser independente de como seus produtos sao criados, compostos e representados
    • Um sistema deve ser configurado como um de múltiplas famílias de produtos
abstract factory6
Abstract Factory
  • Participantes
    • AbstractFactory: Declara uma interface para a criação de objetos abstratos.
    • ConcreteFactory: Implementa as operações que criam objetos concretos.
    • AbstractProduct: Declara uma interface para um tipo de objeto.
    • ConcreteProduct: Define um objeto a ser criado pela fábrica concreta correspondente e implementa a interface de AbstractProduct.
    • Client: Utiliza somente as interfaces declaradas pelas classes AbstractFactory e AbstractProduct.
abstract factory7
Abstract Factory
  • Colaborações
    • Normalmente uma única instância de uma classe FactoryConcreta é criada em tempo de execução. Essa FactoryConcreta cria objetos tendo uma implementação particular. Para criar produtos diferentes, clientes devem usar uma FactoryConcreta diferente.
    • FactoryAbstrata depende de suas subclasses FactoryConcreta para criar objetos de produtos
abstract factory8
Abstract Factory
  • Consequências
    • O padrão isola classes concretas
      • Uma factory encapsula a responsabilidade e o processo de criação de objetos de produtos
      • Isola clientes das classes de implementação
      • O cliente manipula instâncias através de suas interfaces abstratas
    • Facilita o câmbio de famílias de produtos
      • A classe da FactoryConcreta só aparece em um lugar: onde ela é instanciada
      • Uma mudança numa única linha de código pode ser suficiente para mudar a FactoryConcreta que a aplicação usa
        • A família inteira de produtos muda de uma vez
abstract factory9
Abstract Factory
  • Consequências
    • Promove a consistência entre produtos
      • Produtos de uma determinada família devem funcionar conjuntamente e não misturados com produtos de outra família
      • O padrão permite implementar esta restrição com facilidade
    • Do lado negativo: dar suporte a novos tipos de produtos é difícil
      • O motivo é que a FactoryAbstrata fixa o conjunto de produtos que podem ser criados
      • Dar suporte a mais produtos força a extensão da interface da factory o que envolve mudanças na FactoryAbstrata e em todas suas subclasses FactoryConcreta
abstract factory10
Abstract Factory

ProdutoAbstrato

  • Exemplo

public abstract class Document {

protected String content;

public String getContent()

{ return content;}

public abstract String getTemplate();

public abstract String getType();

}

ProdutoA1

public class SimpleLetterDocument extends Document{

public String getTemplate(){

// conteúdo para retornar o template deste tipo de documento}

public String getType(){

return “Simple Letter”; }

}

abstract factory11
Abstract Factory

ProdutoA2

  • Exemplo
  • public class ProfessionalLetterDocument extends Document{
    • public String getTemplate(){// conteúdo para retornar o template deste tipo de documento }
    • public String getType(){ return “Pro Letter”;}
  • }

ProdutoB1

  • public class SimpleSpreadSheetDocument extends Document{
    • public String getTemplate(){ … }
    • public String getType(){
    • return “Simple Spreadsheet”;}
  • }
abstract factory12
Abstract Factory

ProdutoB2

  • Exemplo
  • public class FancySpreadSheetDocument extends Document{
    • public String getTemplate(){…}
    • public String getType()
    • { return “Fancy Spreadsheet”; }
  • }

ConcreteFactory p/ cartas

  • public class LetterFactory{
    • public static Document getLetter(String style){
      • if(”simple”.equals(style))
      • { return new SimpleLetterDocument(); }
      • if(”pro”.equals(style))
      • { return new ProfessionalLetterDocument();}
      • else return null;
    • }
  • }
abstract factory13
Abstract Factory

ConcreteFactory p/ planilhas

  • Exemplo
  • public class SpreadSheetFactory{
    • public static Document getSpreadSheet(String style){
      • if(”simple”.equals(style))
      • {return new SimpleSpreadSheetDocument();}
      • if(”fancy”.equals(style))
      • {return new FancyLetterDocument();}
      • else return null;
    • }
  • }

AbstractFactory

  • public class DocumentFactory{
    • public Document getDocument(String type, String style){
      • if(”letter”.equals(type))
      • {return LetterFactory.getLetter(style);}
      • if(”spreadsheet”.equals(type))
      • {return SpreadSheetFactory.getSpreadSheet(style);}
    • }
  • }
abstract factory14
Abstract Factory

Client

  • Exemplo
  • public class Cliente{
    • public static void main(String[] args){
      • Document letter1 = DocumentFactory.getDocument(”letter”, “simple”);
      • Document letter2 = DocumentFactory.getDocument(”letter”, “pro”);
      • Document sp1 = DocumentFactory.getDocument(”spreadsheet”, “simple”);
      • Document sp2 = DocumentFactory.getDocument(”spreadsheet”, “pro”);
      • System.out.println(letter1.getType()); // Simple Letter
      • System.out.println(letter2.getType()); // Pro Letter
      • System.out.println(sp1.getType()); // Simple Spreadsheet
      • System.out.println(sp2.getType()); // Fancy Spreadsheet
    • }
  • }