SlideShare uma empresa Scribd logo
1 de 20
Baixar para ler offline
Padrões de Projeto

       Padrões Criacionais
          Abstract Factory
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
Motivação




3   Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
      of Reusable OO Software - Gamma
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
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
Estrutura




6   Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
      of Reusable OO Software - Gamma
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
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
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
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
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
Exemplo




12   Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
       of Reusable OO Software - Gamma
Exemplo




13   Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
       of Reusable OO Software - Gamma
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
Exemplo




15   Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
       of Reusable OO Software - Gamma
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
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
Exemplo




18   Livro Texto: Design Pattern - Elements   Eduardo N. F. Zagari
       of Reusable OO Software - Gamma
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
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

Mais conteúdo relacionado

Mais procurados

Padrão de Projetos singleton
Padrão de Projetos singletonPadrão de Projetos singleton
Padrão de Projetos singletonWendel Moreira
 
Exemplos de Design Patterns em Java
Exemplos de Design Patterns em JavaExemplos de Design Patterns em Java
Exemplos de Design Patterns em Javaalexmacedo
 
Poo slides01
Poo slides01Poo slides01
Poo slides01jmtofoli
 
Padrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e BridgePadrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e BridgeLorran Pegoretti
 
Reuso com Herança e Composição
Reuso com Herança e ComposiçãoReuso com Herança e Composição
Reuso com Herança e ComposiçãoDenis L Presciliano
 
Orientação a Objetos com Python e UML - XIII FGSL
Orientação a Objetos com Python e UML - XIII FGSLOrientação a Objetos com Python e UML - XIII FGSL
Orientação a Objetos com Python e UML - XIII FGSLGeorge Mendonça
 
Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Luis Ferreira
 
Orientação a Objetos com PHP
Orientação a Objetos com PHPOrientação a Objetos com PHP
Orientação a Objetos com PHPAugusto Pascutti
 
Python - Orientação a Objetos com UML no Batismo Digital 3.0 da Faculdade JK ...
Python - Orientação a Objetos com UML no Batismo Digital 3.0 da Faculdade JK ...Python - Orientação a Objetos com UML no Batismo Digital 3.0 da Faculdade JK ...
Python - Orientação a Objetos com UML no Batismo Digital 3.0 da Faculdade JK ...George Mendonça
 
Singleton - Padrão de Projeto
Singleton - Padrão de ProjetoSingleton - Padrão de Projeto
Singleton - Padrão de ProjetoEduardo Mendes
 
40 php orientado a objetos
40 php orientado a objetos40 php orientado a objetos
40 php orientado a objetosFrancisco Santos
 
Alex Martelli's Python Design Patterns
Alex Martelli's Python Design PatternsAlex Martelli's Python Design Patterns
Alex Martelli's Python Design PatternsLuciano Ramalho
 
Java Day 2011 - Reflection: Maximizando a produtividade em Java
Java Day 2011 - Reflection: Maximizando a produtividade em JavaJava Day 2011 - Reflection: Maximizando a produtividade em Java
Java Day 2011 - Reflection: Maximizando a produtividade em JavaFábio Antonelli
 
Java: Introducao ao Swing
Java: Introducao ao SwingJava: Introducao ao Swing
Java: Introducao ao SwingArthur Emanuel
 
Uma Abordagem Prática de Orientação a Objetos com PHP (FLISOL DF 2011)
Uma Abordagem Prática de Orientação a Objetos com PHP (FLISOL DF 2011)Uma Abordagem Prática de Orientação a Objetos com PHP (FLISOL DF 2011)
Uma Abordagem Prática de Orientação a Objetos com PHP (FLISOL DF 2011)George Mendonça
 
PHP 5.3 - Classes e Objetos
PHP 5.3 - Classes e ObjetosPHP 5.3 - Classes e Objetos
PHP 5.3 - Classes e ObjetosGeorge Mendonça
 

Mais procurados (20)

Padrão de Projetos singleton
Padrão de Projetos singletonPadrão de Projetos singleton
Padrão de Projetos singleton
 
Exemplos de Design Patterns em Java
Exemplos de Design Patterns em JavaExemplos de Design Patterns em Java
Exemplos de Design Patterns em Java
 
Poo slides01
Poo slides01Poo slides01
Poo slides01
 
Patterns
PatternsPatterns
Patterns
 
Padrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e BridgePadrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e Bridge
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Reuso com Herança e Composição
Reuso com Herança e ComposiçãoReuso com Herança e Composição
Reuso com Herança e Composição
 
Orientação a Objetos com Python e UML - XIII FGSL
Orientação a Objetos com Python e UML - XIII FGSLOrientação a Objetos com Python e UML - XIII FGSL
Orientação a Objetos com Python e UML - XIII FGSL
 
Aula 1 5
Aula 1 5Aula 1 5
Aula 1 5
 
Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos
 
Orientação a Objetos com PHP
Orientação a Objetos com PHPOrientação a Objetos com PHP
Orientação a Objetos com PHP
 
Python - Orientação a Objetos com UML no Batismo Digital 3.0 da Faculdade JK ...
Python - Orientação a Objetos com UML no Batismo Digital 3.0 da Faculdade JK ...Python - Orientação a Objetos com UML no Batismo Digital 3.0 da Faculdade JK ...
Python - Orientação a Objetos com UML no Batismo Digital 3.0 da Faculdade JK ...
 
Singleton - Padrão de Projeto
Singleton - Padrão de ProjetoSingleton - Padrão de Projeto
Singleton - Padrão de Projeto
 
40 php orientado a objetos
40 php orientado a objetos40 php orientado a objetos
40 php orientado a objetos
 
Alex Martelli's Python Design Patterns
Alex Martelli's Python Design PatternsAlex Martelli's Python Design Patterns
Alex Martelli's Python Design Patterns
 
padrao de projeto3
padrao de projeto3padrao de projeto3
padrao de projeto3
 
Java Day 2011 - Reflection: Maximizando a produtividade em Java
Java Day 2011 - Reflection: Maximizando a produtividade em JavaJava Day 2011 - Reflection: Maximizando a produtividade em Java
Java Day 2011 - Reflection: Maximizando a produtividade em Java
 
Java: Introducao ao Swing
Java: Introducao ao SwingJava: Introducao ao Swing
Java: Introducao ao Swing
 
Uma Abordagem Prática de Orientação a Objetos com PHP (FLISOL DF 2011)
Uma Abordagem Prática de Orientação a Objetos com PHP (FLISOL DF 2011)Uma Abordagem Prática de Orientação a Objetos com PHP (FLISOL DF 2011)
Uma Abordagem Prática de Orientação a Objetos com PHP (FLISOL DF 2011)
 
PHP 5.3 - Classes e Objetos
PHP 5.3 - Classes e ObjetosPHP 5.3 - Classes e Objetos
PHP 5.3 - Classes e Objetos
 

Destaque

SO-11 Winux: Laboratório de Sistemas Operacionais
SO-11 Winux: Laboratório de Sistemas OperacionaisSO-11 Winux: Laboratório de Sistemas Operacionais
SO-11 Winux: Laboratório de Sistemas OperacionaisEduardo Nicola F. Zagari
 
Padrões-03 - Padrões Arquiteturais - Pipes e Filtros
Padrões-03 - Padrões Arquiteturais - Pipes e FiltrosPadrões-03 - Padrões Arquiteturais - Pipes e Filtros
Padrões-03 - Padrões Arquiteturais - Pipes e FiltrosEduardo Nicola F. Zagari
 
Padrões-04 - Padrões Arquiteturais - Broker
Padrões-04 - Padrões Arquiteturais - BrokerPadrões-04 - Padrões Arquiteturais - Broker
Padrões-04 - Padrões Arquiteturais - BrokerEduardo Nicola F. Zagari
 
Padrões-05 - Padrões Arquiteturais - MVC
Padrões-05 - Padrões Arquiteturais - MVCPadrões-05 - Padrões Arquiteturais - MVC
Padrões-05 - Padrões Arquiteturais - MVCEduardo Nicola F. Zagari
 
Padrões-02 - Padrões Arquiteturais - Camadas
Padrões-02 - Padrões Arquiteturais - CamadasPadrões-02 - Padrões Arquiteturais - Camadas
Padrões-02 - Padrões Arquiteturais - CamadasEduardo Nicola F. Zagari
 
Padrões-06 - Padrões Arquiteturais - Microkernel
Padrões-06 - Padrões Arquiteturais - MicrokernelPadrões-06 - Padrões Arquiteturais - Microkernel
Padrões-06 - Padrões Arquiteturais - MicrokernelEduardo Nicola F. Zagari
 

Destaque (16)

Apresentacao
ApresentacaoApresentacao
Apresentacao
 
Padrões-01 - Introdução
Padrões-01 - IntroduçãoPadrões-01 - Introdução
Padrões-01 - Introdução
 
ICC-07 Softwares - Introdução
ICC-07 Softwares - IntroduçãoICC-07 Softwares - Introdução
ICC-07 Softwares - Introdução
 
SO-11 Winux: Laboratório de Sistemas Operacionais
SO-11 Winux: Laboratório de Sistemas OperacionaisSO-11 Winux: Laboratório de Sistemas Operacionais
SO-11 Winux: Laboratório de Sistemas Operacionais
 
Uma Breve Introdução ao MongoDB
Uma Breve Introdução ao MongoDBUma Breve Introdução ao MongoDB
Uma Breve Introdução ao MongoDB
 
Classificação de Documentos
Classificação de DocumentosClassificação de Documentos
Classificação de Documentos
 
Padrões-03 - Padrões Arquiteturais - Pipes e Filtros
Padrões-03 - Padrões Arquiteturais - Pipes e FiltrosPadrões-03 - Padrões Arquiteturais - Pipes e Filtros
Padrões-03 - Padrões Arquiteturais - Pipes e Filtros
 
Padrões-04 - Padrões Arquiteturais - Broker
Padrões-04 - Padrões Arquiteturais - BrokerPadrões-04 - Padrões Arquiteturais - Broker
Padrões-04 - Padrões Arquiteturais - Broker
 
Padrões-05 - Padrões Arquiteturais - MVC
Padrões-05 - Padrões Arquiteturais - MVCPadrões-05 - Padrões Arquiteturais - MVC
Padrões-05 - Padrões Arquiteturais - MVC
 
ICC-05 Álgebra Booleana
ICC-05 Álgebra BooleanaICC-05 Álgebra Booleana
ICC-05 Álgebra Booleana
 
ICC-06 Periféricos - Introdução
ICC-06 Periféricos - IntroduçãoICC-06 Periféricos - Introdução
ICC-06 Periféricos - Introdução
 
ICC-02 Evolução dos Computadores
ICC-02 Evolução dos ComputadoresICC-02 Evolução dos Computadores
ICC-02 Evolução dos Computadores
 
ICC-01 História dos Computadores
ICC-01 História dos ComputadoresICC-01 História dos Computadores
ICC-01 História dos Computadores
 
Padrões-02 - Padrões Arquiteturais - Camadas
Padrões-02 - Padrões Arquiteturais - CamadasPadrões-02 - Padrões Arquiteturais - Camadas
Padrões-02 - Padrões Arquiteturais - Camadas
 
Padrões-06 - Padrões Arquiteturais - Microkernel
Padrões-06 - Padrões Arquiteturais - MicrokernelPadrões-06 - Padrões Arquiteturais - Microkernel
Padrões-06 - Padrões Arquiteturais - Microkernel
 
Introdução à Linguagem Ruby
Introdução à Linguagem RubyIntrodução à Linguagem Ruby
Introdução à Linguagem Ruby
 

Semelhante a Abstract Factory Padrão de Projeto

Padroes de projetos gof
Padroes de projetos gofPadroes de projetos gof
Padroes de projetos gofYan Justino
 
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 ObjetosCloves da Rocha
 
POO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfPOO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfAndreCosta502039
 
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 ObjetosFabio Kon
 
GoF Design Patterns - Borland Conference (BorCon) 2004
GoF Design Patterns - Borland Conference (BorCon) 2004GoF Design Patterns - Borland Conference (BorCon) 2004
GoF Design Patterns - Borland Conference (BorCon) 2004Daniel Wildt
 
Componentes Transformers: Combinando o melhor de cada framework
Componentes Transformers: Combinando o melhor de cada frameworkComponentes Transformers: Combinando o melhor de cada framework
Componentes Transformers: Combinando o melhor de cada frameworkFlávio Lisboa
 
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone Apps
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone AppsComo deixar de fazer "copy and paste" entre Windows Store e Windows Phone Apps
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone AppsComunidade NetPonto
 
Curso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosCurso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosLeonardo Melo Santos
 
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 01Walney Negreiros
 
5507 os principais design patterns
5507   os principais design patterns5507   os principais design patterns
5507 os principais design patternsAndre Baltieri
 
Arquitetura mix thiagoboufleuhr
Arquitetura mix thiagoboufleuhrArquitetura mix thiagoboufleuhr
Arquitetura mix thiagoboufleuhrThiago Boufleuhr
 

Semelhante a Abstract Factory Padrão de Projeto (20)

Padroes de projetos gof
Padroes de projetos gofPadroes de projetos gof
Padroes de projetos gof
 
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
 
POO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdfPOO2-Pre-32-PadroesProjetos_.pdf
POO2-Pre-32-PadroesProjetos_.pdf
 
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
 
Abstract
AbstractAbstract
Abstract
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Travalho versao final
Travalho versao finalTravalho versao final
Travalho versao final
 
Factory apresentacao
Factory   apresentacaoFactory   apresentacao
Factory apresentacao
 
GoF Design Patterns - Borland Conference (BorCon) 2004
GoF Design Patterns - Borland Conference (BorCon) 2004GoF Design Patterns - Borland Conference (BorCon) 2004
GoF Design Patterns - Borland Conference (BorCon) 2004
 
Iniciando no Codeigniter
Iniciando no CodeigniterIniciando no Codeigniter
Iniciando no Codeigniter
 
Iniciando com Codeigniter
Iniciando com CodeigniterIniciando com Codeigniter
Iniciando com Codeigniter
 
padrao de projeto1
padrao de projeto1padrao de projeto1
padrao de projeto1
 
Componentes Transformers: Combinando o melhor de cada framework
Componentes Transformers: Combinando o melhor de cada frameworkComponentes Transformers: Combinando o melhor de cada framework
Componentes Transformers: Combinando o melhor de cada framework
 
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone Apps
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone AppsComo deixar de fazer "copy and paste" entre Windows Store e Windows Phone Apps
Como deixar de fazer "copy and paste" entre Windows Store e Windows Phone Apps
 
Curso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosCurso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação 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
 
I mini curso e torneio robocode.pptx
I mini curso e torneio  robocode.pptxI mini curso e torneio  robocode.pptx
I mini curso e torneio robocode.pptx
 
5507 os principais design patterns
5507   os principais design patterns5507   os principais design patterns
5507 os principais design patterns
 
Arquitetura mix thiagoboufleuhr
Arquitetura mix thiagoboufleuhrArquitetura mix thiagoboufleuhr
Arquitetura mix thiagoboufleuhr
 

Mais de Eduardo Nicola F. Zagari

Onix: Sistema Integrado de Gerˆencia para Redes Sobrepostas
Onix: Sistema Integrado de Gerˆencia para Redes SobrepostasOnix: Sistema Integrado de Gerˆencia para Redes Sobrepostas
Onix: Sistema Integrado de Gerˆencia para Redes SobrepostasEduardo Nicola F. Zagari
 
Uma Plataforma para Engenharia de Tráfego com Qualidade de Serviço em Redes MPLS
Uma Plataforma para Engenharia de Tráfego com Qualidade de Serviço em Redes MPLSUma Plataforma para Engenharia de Tráfego com Qualidade de Serviço em Redes MPLS
Uma Plataforma para Engenharia de Tráfego com Qualidade de Serviço em Redes MPLSEduardo Nicola F. Zagari
 
Uma Implementação do MPLS para Redes Linux
Uma Implementação do MPLS para Redes LinuxUma Implementação do MPLS para Redes Linux
Uma Implementação do MPLS para Redes LinuxEduardo Nicola F. Zagari
 
Módulo de Estudos e Treinamento em Tempo Real
Módulo de Estudos e Treinamento em Tempo RealMódulo de Estudos e Treinamento em Tempo Real
Módulo de Estudos e Treinamento em Tempo RealEduardo Nicola F. Zagari
 
Aproveitamento Funcional de Sistemas Digitais em Subestações: Funções Automát...
Aproveitamento Funcional de Sistemas Digitais em Subestações: Funções Automát...Aproveitamento Funcional de Sistemas Digitais em Subestações: Funções Automát...
Aproveitamento Funcional de Sistemas Digitais em Subestações: Funções Automát...Eduardo Nicola F. Zagari
 
Modernização e Implantação das Funções de Análise de Rede em Tempo Real no Ce...
Modernização e Implantação das Funções de Análise de Rede em Tempo Real no Ce...Modernização e Implantação das Funções de Análise de Rede em Tempo Real no Ce...
Modernização e Implantação das Funções de Análise de Rede em Tempo Real no Ce...Eduardo Nicola F. Zagari
 
Master Thesis - Zagari, Eduardo Nicola Ferraz: Escalonamento em Tempo Real da...
Master Thesis - Zagari, Eduardo Nicola Ferraz: Escalonamento em Tempo Real da...Master Thesis - Zagari, Eduardo Nicola Ferraz: Escalonamento em Tempo Real da...
Master Thesis - Zagari, Eduardo Nicola Ferraz: Escalonamento em Tempo Real da...Eduardo Nicola F. Zagari
 

Mais de Eduardo Nicola F. Zagari (10)

Onix: Sistema Integrado de Gerˆencia para Redes Sobrepostas
Onix: Sistema Integrado de Gerˆencia para Redes SobrepostasOnix: Sistema Integrado de Gerˆencia para Redes Sobrepostas
Onix: Sistema Integrado de Gerˆencia para Redes Sobrepostas
 
Uma Plataforma para Engenharia de Tráfego com Qualidade de Serviço em Redes MPLS
Uma Plataforma para Engenharia de Tráfego com Qualidade de Serviço em Redes MPLSUma Plataforma para Engenharia de Tráfego com Qualidade de Serviço em Redes MPLS
Uma Plataforma para Engenharia de Tráfego com Qualidade de Serviço em Redes MPLS
 
Uma Implementação do MPLS para Redes Linux
Uma Implementação do MPLS para Redes LinuxUma Implementação do MPLS para Redes Linux
Uma Implementação do MPLS para Redes Linux
 
Módulo de Estudos e Treinamento em Tempo Real
Módulo de Estudos e Treinamento em Tempo RealMódulo de Estudos e Treinamento em Tempo Real
Módulo de Estudos e Treinamento em Tempo Real
 
Módulo de Estudos em Tempo Real
Módulo de Estudos em Tempo RealMódulo de Estudos em Tempo Real
Módulo de Estudos em Tempo Real
 
Aproveitamento Funcional de Sistemas Digitais em Subestações: Funções Automát...
Aproveitamento Funcional de Sistemas Digitais em Subestações: Funções Automát...Aproveitamento Funcional de Sistemas Digitais em Subestações: Funções Automát...
Aproveitamento Funcional de Sistemas Digitais em Subestações: Funções Automát...
 
Modernização e Implantação das Funções de Análise de Rede em Tempo Real no Ce...
Modernização e Implantação das Funções de Análise de Rede em Tempo Real no Ce...Modernização e Implantação das Funções de Análise de Rede em Tempo Real no Ce...
Modernização e Implantação das Funções de Análise de Rede em Tempo Real no Ce...
 
Master Thesis - Zagari, Eduardo Nicola Ferraz: Escalonamento em Tempo Real da...
Master Thesis - Zagari, Eduardo Nicola Ferraz: Escalonamento em Tempo Real da...Master Thesis - Zagari, Eduardo Nicola Ferraz: Escalonamento em Tempo Real da...
Master Thesis - Zagari, Eduardo Nicola Ferraz: Escalonamento em Tempo Real da...
 
ICC-03 Organização dos Computadores
ICC-03 Organização dos ComputadoresICC-03 Organização dos Computadores
ICC-03 Organização dos Computadores
 
ICC-04 Sistemas Numéricos
ICC-04 Sistemas NuméricosICC-04 Sistemas Numéricos
ICC-04 Sistemas Numéricos
 

Abstract Factory Padrão de Projeto

  • 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