SlideShare uma empresa Scribd logo
1 de 10
Baixar para ler offline
Padrões de Projeto
       _______________________________________
Creational Patterns

Abstract Factory
      Proporciona uma interface para criar famílias de objetos relacionados ou
      dependentes sem especificar suas classes concretas
      Use Abstract Factory quando:
         o O sistema deve ser independente de como seus produtos são criados,
            compostos e representados
         o O sistema deve ser configurado com uma de múltiplas famílias de produtos
         o Uma família de objetos de produtos relacionados é projetada para ser usada
            junta, e você precisa assegurar essa restrição
         o Você quer proporcionar uma biblioteca de classes de produtos, e você só
            quer revelar suas interfaces, não suas implementações




Builder
      Separa a construção de um objeto complexo da sua representação, de forma que o
      mesmo processo de construção possa criar diferentes tipos de representações
      Use o Builder quando:
         o O algoritmo para criar um objeto complexo deva ser independente das
            partes que constituem o objeto e de como ele é montado
         o O processo de construção deva permitir representações diferentes para o
            objeto que é construído
Factory Method
      Define uma interface para criar um objeto, mas deixa as subclasses decidirem qual
      classe instanciar. O Factory Method permite uma classe deferir a instanciação às
      subclasses
      Use Factory Method quando:
          o Uma classe não pode antecipar a classe de objetos que ela deve criar
          o Uma classe quer que suas subclasses especifiquem os objetos que ela cria




Prototype
      Especifica os tipos de objetos para criar usando uma instância prototípica, e cria
      novos objetos copiando esse protótipo
      Use o Prototype quando/em:
         o As classes para serem instanciadas são especificadas em run-time, como
            por exemplo, por dynamic loading
         o Sistemas que utilizam o padrão Abstract Factory para criação de objetos.
            Neste caso, a hierarquia de classes pode se tornar muito complexa e o
padrão Prototype pode ser uma alternativa mais simples, por realizar a
           mesma tarefa com um número reduzido de classes;
         o Sistemas que possuem componentes cujo estado inicial possui poucas
           variações e onde é conveniente disponibilizar um conjunto pré-estabelecido
           de protótipos que dão origem aos objetos que compõem o sistema.




Singleton
      Garante que uma classe tem apenas uma instância, e proporciona um ponto de
      acesso global a ela
      Use Singleton quando:
          o Deve haver exatamente uma instância de uma classe, e ela deve ser
             acessível aos clientes a partir de um ponto-de-acesso conhecido
Structural Patterns

Adapter
     Converte a interface de uma classe em outra interface que o cliente espera.
     Adapter permite que classes que normalmente nao poderiam trabalhar juntas,
     devido à incompatibilidade de interfaces, possam fazê-lo.
     Use o Adapter quando:
        o Você quer usar uma classe existente, e sua interface não é adequada àquela
           que você precisa
        o Você quer criar uma classe reusável que coopera com classes não-
           relacionadas ou não-previstas, isto é, classes que não necessariamente têm
           interfaces compatíveis
        o Você precisa usar várias subclasses existentes, mas é impraticável adaptar
           suas interfaces especializando cada uma. Um object adapter pode adaptar a
           interface de suas classes pais




Bridge
      Desacopla uma interface de sua implementação, de forma que ela possa variar
      independentemente
      Use o Bridge quando:
         o Você quer evitar um vínculo entre a abstração e a implementação. Esse
            pode ser o caso, por exemplo, quando a implementação deve ser
            selecionada em tempo de execução
         o Ambas a abstração e a implementação devem ser estensíveis através de
            subclasses
         o Mudanças na implementação de uma abstração não deveriam ter impacto
            sobre os clientes, isto é, seu código não deveria ser recompilado
Composite
    Compõe objetos em estruturas de árvore para representar hierarquias parte-todo.
    Composite deixa os clientes tratar objetos individuais e composições de objetos
    livremente
    Use Composite quando:
        o Você quer representar hierarquias parte-todo de objetos
        o Você quer que os clientes possam ignorar a diferença entre composições de
          objetos e objetos individuais. Clientes vão tratar os objetos na estrutura
          composta de forma uniforme




Decorator
     Anexa responsabilidades adicionais a um objeto dinamicamente. Decoradores
     fornecem uma alternativa flexível em relação à herança, para estender
     funcionalidades
Use o Decorator:
           o Para adicionar responsabilidades a objetos individuais dinâmica e
              transparentemente, isto é, sem afetar os outros objetos
           o Para responsabilidades que podem ser retiradas
           o Quando a extensão por subclasses é impraticável. Algumas vezes uma
              grande quantidade de combinações de de subclasses é possível, causando
              uma explosão na hierarquia




Proxy
        Fornece um objeto representante ou um marcador de outro objeto para controlar o
        acesso ao mesmo
        Proxy é aplicável toda vez que há uma necessidade de uma referência mais versátil
        ou sofisticada do que um simples ponteiro para um objeto
        Alguns tipos de proxy:
           o Remote proxy
           o Virtual proxy
           o Protection poxy
           o Smart reference
Behavioral Patterns

Strategy
      Define uma família de algoritmos, encapsula cada um, e faz deles intercambiáveis.
      Strategy permite que o algoritmo varie independentemente de clentes que usam-no
      Use Strategy quando:
         o Várias classes relacionadas diferem apenas em seus comportamentos.
             Strategy proporciona um modo de configurar uma classe com um de muitos
             comportamentos
         o Você precisa de diferentes variantes de um algoritmo
         o Uma classe define muitos comportamentos, e eles aparecem como
             múltiplas declarações condicionais nas suas operações. Ao invés de várias
             condições, mova desvios condicionais relacionados para sua propria classe
             Strategy
Command
    Encapsula uma requisição como um objeto, deixando-o, dessa forma, parametrizar
    os clientes com diferentes requisições
    Use o Command quando você quer:
        o Parametrizar objetos para realizar alguma ação
        o Especificar, enfileirar e executar requisições em tempos diferentes
        o Suportar undo
        o Suportar transações




Observer
     Define uma dependência um-para-muitos entre objetos de forma que quando um
     objeto muda de estado, todos os seus dependentes são notificados e atualizados
     automaticamente
     Use o Observer em qualquer uma das seguintes situações:
         o Quando uma abstração tem dois aspectos, um dependente do outro.
            Encapsular esses aspectos em objetos separados permite você variá-los e
            usá-los independentemente
         o Quando uma mudança em um objeto requer mudanças em outros objetos e
            você não sabe quantos objetos serão mudados
         o Quando um objeto deve ser capaz de notificar outros objetos sem fazer
            deduções sobre quem esses objetos são. Em outras palavras, você não quer
            esses objetos fortemente acoplados
Template Method
     Define o esqueleto de um algoritmo em uma operação, deferindo alguns passos
     para as subclasses. Template Method permite que subclasses redefinam certos
     passos de algum algoritmo sem mudar a estrutura do algoritmo
     O Template Method deve ser usado:
         o Para implementar a parte invariante de um algoritmo uma vez e deixar para
            as subclasses a implementação do comportamento que pode variar
         o Quando comportamentos comuns entre subclasses devem ser fatorados e
            localizados em uma classe comum para evitar duplicação de código
Padroes de Projeto

Mais conteúdo relacionado

Mais procurados

Padrão de Projeto Observer
Padrão de Projeto ObserverPadrão de Projeto Observer
Padrão de Projeto ObserverLuiza Uira
 
Strategy - Padrões de Projeto
Strategy - Padrões de ProjetoStrategy - Padrões de Projeto
Strategy - Padrões de ProjetoEduardo Mendes
 
Padrões de Projeto - Observer
Padrões de Projeto - ObserverPadrões de Projeto - Observer
Padrões de Projeto - ObserverJuliana Cindra
 
Apresentação programação orientada à objetos
Apresentação   programação orientada à objetosApresentação   programação orientada à objetos
Apresentação programação orientada à objetossoncino
 
Conceitos Básicos de Orientação o Objetos aplicdo ao VBA - Classes em vba
Conceitos Básicos de Orientação o Objetos aplicdo ao VBA - Classes em vbaConceitos Básicos de Orientação o Objetos aplicdo ao VBA - Classes em vba
Conceitos Básicos de Orientação o Objetos aplicdo ao VBA - Classes em vbaWanderlei Silva do Carmo
 
Java - Aula 4 - Sobrecarga de construtores, UML e Herança
Java - Aula 4 - Sobrecarga de construtores, UML e HerançaJava - Aula 4 - Sobrecarga de construtores, UML e Herança
Java - Aula 4 - Sobrecarga de construtores, UML e HerançaMoises Omena
 
Apresentação curso de Extensão em Java (UERJ-IME) v1
Apresentação curso de Extensão em Java (UERJ-IME) v1Apresentação curso de Extensão em Java (UERJ-IME) v1
Apresentação curso de Extensão em Java (UERJ-IME) v1Marcelo Zeferino
 
Introdução a programação Orientada a Objeto
Introdução a programação Orientada a ObjetoIntrodução a programação Orientada a Objeto
Introdução a programação Orientada a ObjetoMarconi Rodrigues
 
Programação Orientada a Objetos
Programação Orientada a ObjetosProgramação Orientada a Objetos
Programação Orientada a ObjetosOrlando Junior
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetosCleyton Ferrari
 
Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...Adriano Teixeira de Souza
 

Mais procurados (20)

Padrão de Projeto Observer
Padrão de Projeto ObserverPadrão de Projeto Observer
Padrão de Projeto Observer
 
Strategy - Padrões de Projeto
Strategy - Padrões de ProjetoStrategy - Padrões de Projeto
Strategy - Padrões de Projeto
 
Padrões de Projeto - Observer
Padrões de Projeto - ObserverPadrões de Projeto - Observer
Padrões de Projeto - Observer
 
Apresentação programação orientada à objetos
Apresentação   programação orientada à objetosApresentação   programação orientada à objetos
Apresentação programação orientada à objetos
 
Paradigma Orientado a Objeto
Paradigma Orientado a ObjetoParadigma Orientado a Objeto
Paradigma Orientado a Objeto
 
Prototype
PrototypePrototype
Prototype
 
Poo padadigmas
Poo padadigmasPoo padadigmas
Poo padadigmas
 
Conceitos Básicos de Orientação o Objetos aplicdo ao VBA - Classes em vba
Conceitos Básicos de Orientação o Objetos aplicdo ao VBA - Classes em vbaConceitos Básicos de Orientação o Objetos aplicdo ao VBA - Classes em vba
Conceitos Básicos de Orientação o Objetos aplicdo ao VBA - Classes em vba
 
Java - Aula 4 - Sobrecarga de construtores, UML e Herança
Java - Aula 4 - Sobrecarga de construtores, UML e HerançaJava - Aula 4 - Sobrecarga de construtores, UML e Herança
Java - Aula 4 - Sobrecarga de construtores, UML e Herança
 
Patterns
PatternsPatterns
Patterns
 
Apresentação curso de Extensão em Java (UERJ-IME) v1
Apresentação curso de Extensão em Java (UERJ-IME) v1Apresentação curso de Extensão em Java (UERJ-IME) v1
Apresentação curso de Extensão em Java (UERJ-IME) v1
 
Introdução a programação Orientada a Objeto
Introdução a programação Orientada a ObjetoIntrodução a programação Orientada a Objeto
Introdução a programação Orientada a Objeto
 
Programação Orientada a Objetos
Programação Orientada a ObjetosProgramação Orientada a Objetos
Programação Orientada a Objetos
 
JAVA - Herança
JAVA - HerançaJAVA - Herança
JAVA - Herança
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetos
 
Padrões de Projeto para Jogos
Padrões de Projeto para JogosPadrões de Projeto para Jogos
Padrões de Projeto para Jogos
 
Encapsulamento em oo
Encapsulamento em ooEncapsulamento em oo
Encapsulamento em oo
 
Java - Boas práticas
Java - Boas práticasJava - Boas práticas
Java - Boas práticas
 
Estudos Technocorp
Estudos TechnocorpEstudos Technocorp
Estudos Technocorp
 
Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...
 

Semelhante a Padroes de Projeto

Padrão De Projeto Adapter
Padrão De Projeto AdapterPadrão De Projeto Adapter
Padrão De Projeto AdapterMatheus Andrade
 
Orientação a Objetos no Delphi - Por onde começar (I)
Orientação a Objetos no Delphi - Por onde começar (I)Orientação a Objetos no Delphi - Por onde começar (I)
Orientação a Objetos no Delphi - Por onde começar (I)Ryan Padilha
 
Script c
Script cScript c
Script cRaphael
 
Padrões de projetos
Padrões de projetosPadrões de projetos
Padrões de projetosGustavo Souza
 
Arquitetura mix thiagoboufleuhr
Arquitetura mix thiagoboufleuhrArquitetura mix thiagoboufleuhr
Arquitetura mix thiagoboufleuhrThiago Boufleuhr
 
Paradigma de orientação a objetos -
Paradigma de orientação a objetos - Paradigma de orientação a objetos -
Paradigma de orientação a objetos - André Victor
 
Apresentação Introdução Design Patterns
Apresentação Introdução Design PatternsApresentação Introdução Design Patterns
Apresentação Introdução Design PatternsLucas Simões Maistro
 
Construção de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em JavaConstrução de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em JavaFernando Camargo
 
Padrão de Projetos singleton
Padrão de Projetos singletonPadrão de Projetos singleton
Padrão de Projetos singletonWendel Moreira
 
design patterns - introdução
design patterns - introduçãodesign patterns - introdução
design patterns - introduçãoelliando dias
 
Padrões de projeto - Martin Fowler - P of EAA
Padrões de projeto - Martin Fowler - P of EAAPadrões de projeto - Martin Fowler - P of EAA
Padrões de projeto - Martin Fowler - P of EAAAricelio Souza
 
HERANÇA - Programação Orientada a Objetos JAVA
HERANÇA - Programação Orientada a Objetos JAVAHERANÇA - Programação Orientada a Objetos JAVA
HERANÇA - Programação Orientada a Objetos JAVAAparicio Junior
 
[Software Design Pattern] - Dependency Injection
[Software Design Pattern] - Dependency Injection[Software Design Pattern] - Dependency Injection
[Software Design Pattern] - Dependency InjectionBruno Brandes
 

Semelhante a Padroes de Projeto (20)

Padrões de design orientado a objetos
Padrões de design orientado a objetosPadrões de design orientado a objetos
Padrões de design orientado a objetos
 
Padrão De Projeto Adapter
Padrão De Projeto AdapterPadrão De Projeto Adapter
Padrão De Projeto Adapter
 
Orientação a Objetos no Delphi - Por onde começar (I)
Orientação a Objetos no Delphi - Por onde começar (I)Orientação a Objetos no Delphi - Por onde começar (I)
Orientação a Objetos no Delphi - Por onde começar (I)
 
Script c
Script cScript c
Script c
 
Padrões de projetos
Padrões de projetosPadrões de projetos
Padrões de projetos
 
Arquitetura mix thiagoboufleuhr
Arquitetura mix thiagoboufleuhrArquitetura mix thiagoboufleuhr
Arquitetura mix thiagoboufleuhr
 
Paradigma de orientação a objetos -
Paradigma de orientação a objetos - Paradigma de orientação a objetos -
Paradigma de orientação a objetos -
 
Apresentação Introdução Design Patterns
Apresentação Introdução Design PatternsApresentação Introdução Design Patterns
Apresentação Introdução Design Patterns
 
Construção de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em JavaConstrução de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em Java
 
Padrão de Projetos singleton
Padrão de Projetos singletonPadrão de Projetos singleton
Padrão de Projetos singleton
 
Padrão bridger
Padrão bridgerPadrão bridger
Padrão bridger
 
Design pattern
Design patternDesign pattern
Design pattern
 
Aula orientação a objetos
Aula orientação a objetosAula orientação a objetos
Aula orientação a objetos
 
design patterns - introdução
design patterns - introduçãodesign patterns - introdução
design patterns - introdução
 
Refatorações
RefatoraçõesRefatorações
Refatorações
 
Padrões de projeto - Martin Fowler - P of EAA
Padrões de projeto - Martin Fowler - P of EAAPadrões de projeto - Martin Fowler - P of EAA
Padrões de projeto - Martin Fowler - P of EAA
 
Java7
Java7Java7
Java7
 
HERANÇA - Programação Orientada a Objetos JAVA
HERANÇA - Programação Orientada a Objetos JAVAHERANÇA - Programação Orientada a Objetos JAVA
HERANÇA - Programação Orientada a Objetos JAVA
 
[Software Design Pattern] - Dependency Injection
[Software Design Pattern] - Dependency Injection[Software Design Pattern] - Dependency Injection
[Software Design Pattern] - Dependency Injection
 
3- POO
3- POO3- POO
3- POO
 

Padroes de Projeto

  • 1. Padrões de Projeto _______________________________________ Creational Patterns Abstract Factory Proporciona uma interface para criar famílias de objetos relacionados ou dependentes sem especificar suas classes concretas Use Abstract Factory quando: o O sistema deve ser independente de como seus produtos são criados, compostos e representados o O sistema deve ser configurado com uma de múltiplas famílias de produtos o Uma família de objetos de produtos relacionados é projetada para ser usada junta, e você precisa assegurar essa restrição o Você quer proporcionar uma biblioteca de classes de produtos, e você só quer revelar suas interfaces, não suas implementações Builder Separa a construção de um objeto complexo da sua representação, de forma que o mesmo processo de construção possa criar diferentes tipos de representações Use o Builder quando: o O algoritmo para criar um objeto complexo deva ser independente das partes que constituem o objeto e de como ele é montado o O processo de construção deva permitir representações diferentes para o objeto que é construído
  • 2. Factory Method Define uma interface para criar um objeto, mas deixa as subclasses decidirem qual classe instanciar. O Factory Method permite uma classe deferir a instanciação às subclasses Use Factory Method quando: o Uma classe não pode antecipar a classe de objetos que ela deve criar o Uma classe quer que suas subclasses especifiquem os objetos que ela cria Prototype Especifica os tipos de objetos para criar usando uma instância prototípica, e cria novos objetos copiando esse protótipo Use o Prototype quando/em: o As classes para serem instanciadas são especificadas em run-time, como por exemplo, por dynamic loading o Sistemas que utilizam o padrão Abstract Factory para criação de objetos. Neste caso, a hierarquia de classes pode se tornar muito complexa e o
  • 3. padrão Prototype pode ser uma alternativa mais simples, por realizar a mesma tarefa com um número reduzido de classes; o Sistemas que possuem componentes cujo estado inicial possui poucas variações e onde é conveniente disponibilizar um conjunto pré-estabelecido de protótipos que dão origem aos objetos que compõem o sistema. Singleton Garante que uma classe tem apenas uma instância, e proporciona um ponto de acesso global a ela Use Singleton quando: o Deve haver exatamente uma instância de uma classe, e ela deve ser acessível aos clientes a partir de um ponto-de-acesso conhecido
  • 4. Structural Patterns Adapter Converte a interface de uma classe em outra interface que o cliente espera. Adapter permite que classes que normalmente nao poderiam trabalhar juntas, devido à incompatibilidade de interfaces, possam fazê-lo. Use o Adapter quando: o Você quer usar uma classe existente, e sua interface não é adequada àquela que você precisa o Você quer criar uma classe reusável que coopera com classes não- relacionadas ou não-previstas, isto é, classes que não necessariamente têm interfaces compatíveis o Você precisa usar várias subclasses existentes, mas é impraticável adaptar suas interfaces especializando cada uma. Um object adapter pode adaptar a interface de suas classes pais Bridge Desacopla uma interface de sua implementação, de forma que ela possa variar independentemente Use o Bridge quando: o Você quer evitar um vínculo entre a abstração e a implementação. Esse pode ser o caso, por exemplo, quando a implementação deve ser selecionada em tempo de execução o Ambas a abstração e a implementação devem ser estensíveis através de subclasses o Mudanças na implementação de uma abstração não deveriam ter impacto sobre os clientes, isto é, seu código não deveria ser recompilado
  • 5. Composite Compõe objetos em estruturas de árvore para representar hierarquias parte-todo. Composite deixa os clientes tratar objetos individuais e composições de objetos livremente Use Composite quando: o Você quer representar hierarquias parte-todo de objetos o Você quer que os clientes possam ignorar a diferença entre composições de objetos e objetos individuais. Clientes vão tratar os objetos na estrutura composta de forma uniforme Decorator Anexa responsabilidades adicionais a um objeto dinamicamente. Decoradores fornecem uma alternativa flexível em relação à herança, para estender funcionalidades
  • 6. Use o Decorator: o Para adicionar responsabilidades a objetos individuais dinâmica e transparentemente, isto é, sem afetar os outros objetos o Para responsabilidades que podem ser retiradas o Quando a extensão por subclasses é impraticável. Algumas vezes uma grande quantidade de combinações de de subclasses é possível, causando uma explosão na hierarquia Proxy Fornece um objeto representante ou um marcador de outro objeto para controlar o acesso ao mesmo Proxy é aplicável toda vez que há uma necessidade de uma referência mais versátil ou sofisticada do que um simples ponteiro para um objeto Alguns tipos de proxy: o Remote proxy o Virtual proxy o Protection poxy o Smart reference
  • 7. Behavioral Patterns Strategy Define uma família de algoritmos, encapsula cada um, e faz deles intercambiáveis. Strategy permite que o algoritmo varie independentemente de clentes que usam-no Use Strategy quando: o Várias classes relacionadas diferem apenas em seus comportamentos. Strategy proporciona um modo de configurar uma classe com um de muitos comportamentos o Você precisa de diferentes variantes de um algoritmo o Uma classe define muitos comportamentos, e eles aparecem como múltiplas declarações condicionais nas suas operações. Ao invés de várias condições, mova desvios condicionais relacionados para sua propria classe Strategy
  • 8. Command Encapsula uma requisição como um objeto, deixando-o, dessa forma, parametrizar os clientes com diferentes requisições Use o Command quando você quer: o Parametrizar objetos para realizar alguma ação o Especificar, enfileirar e executar requisições em tempos diferentes o Suportar undo o Suportar transações Observer Define uma dependência um-para-muitos entre objetos de forma que quando um objeto muda de estado, todos os seus dependentes são notificados e atualizados automaticamente Use o Observer em qualquer uma das seguintes situações: o Quando uma abstração tem dois aspectos, um dependente do outro. Encapsular esses aspectos em objetos separados permite você variá-los e usá-los independentemente o Quando uma mudança em um objeto requer mudanças em outros objetos e você não sabe quantos objetos serão mudados o Quando um objeto deve ser capaz de notificar outros objetos sem fazer deduções sobre quem esses objetos são. Em outras palavras, você não quer esses objetos fortemente acoplados
  • 9. Template Method Define o esqueleto de um algoritmo em uma operação, deferindo alguns passos para as subclasses. Template Method permite que subclasses redefinam certos passos de algum algoritmo sem mudar a estrutura do algoritmo O Template Method deve ser usado: o Para implementar a parte invariante de um algoritmo uma vez e deixar para as subclasses a implementação do comportamento que pode variar o Quando comportamentos comuns entre subclasses devem ser fatorados e localizados em uma classe comum para evitar duplicação de código