Padrões de Projeto Flashcards
Padrões de Projeto (Design Patterns)
Descrição de uma solução para resolver um problema genérico de projeto em um contexto específico.Um padrão de projeto dá nome, abstrai e identifica os aspectos-chave de uma estrutura de projeto comum para torná-la reutilizável
Quais os benefícios trazidos pela adoção de padrões de projetos?
- Padrões capturam a estrutura estática e a colaboração dinâmica entre objetos participantes no projeto de sistemas.
- São especialmente bons para descrever como e por que resolver problemas não funcionais.
- Facilitam o reuso de soluções arquiteturais que deram certo antes.
- Aumentam a coesão, diminuem o acoplamento.
Padrões de projeto são compostos por quatro elementos essenciais. São eles:
- Nome do padrão
- Problema a ser resolvido
- Solução dada pelo padrão
- Consequências
O catálogo de padrões de projeto (design patterns) do GoF contém 23 padrões e está,
basicamente, dividido em três seções:
- Criação (Creational)
- Estrutura (Structural)
- Comportamento (Behavioral)
Creational, Structural e Behavioral.
Quais são os 5 padrões de criação (creational)?
Classe:
- Factory Method
Objeto:
- Abstract Factory
- Builder
- Prototype
- Sigleton
Classe: Factory Method
Quais são os 7 padrões de estrutura (Structural)?
- Object Adapter
- Bridge
- Composite
- Decorator
- Facade
- Flyweight
- Proxy
Classe: Class Adapter
Quais são os 11 padrões de Comportamento (Behavioral)?
Classe:
- Interpreter
- Template Method
Objeto:
- Chain of Responsibility
- Command
- Iterator
- Mediator
- Memento
- Observer
- State
- Strategy
- Visitor
Classe: Interpreter Template Method
Padrões de Criação - Abstract Factory
Proporciona uma interface para criar famílias de objetos relacionados ou dependentes sem especificar suas classes concretas.
Quando usar Abstract Factory?
- O sistema deve ser configurado com uma de múltiplas famílias de produtos.
- Estes produtos relacionados são projetados para serem utilizados juntos, e você quer garantir essa restrição.
- Você quer fornecer uma biblioteca de classes de produtos e quer revelar somente suas interfaces, não suas implementações.
Padrões de Criação - Builder:
- Separa a construção de um objeto complexo da sua representação, de forma que o mesmo processo possa criar diferentes tipos de representações.
- Creational Pattern Java que tem por objetivo separar a construção de um objeto complexo da sua representação, de tal forma que diversas representações podem ser criadas em razão da necessidade do programa.
Dica: enquanto Abstract Factory enfatiza famílias de objetos, Builder constrói partes de objetos passo a passo.
Quando usar o builder?
Use Builder quando:
- Algoritmo para criar um objeto deve ser independente de suas partes e de como elas são montadas.
Padrões de Criação - Factory Method
Define uma interface para criar um objeto, mas deixa as subclasses decidirem qual classe instanciar.
Quando usar Factory Method?
Use Factory Method quando:
- Uma classe não pode antecipar a classe de objetos que ela deve criar.
- Uma classe quer que suas subclasses especifiquem os objetos que ela cria.
Padrões de Criação - Prototype:
- Especifica os tipos de objetos para criar uma instância prototípica, e cria novos objetos copiando este protótipo (clonando o objeto original).
Quando usar o padrão prototype?
Use o prototype quando:
- O sistema possui componentes cujo estado inicial tem poucas variações, e é conveniente disponibilizar um conjunto pré estabelecido de protótipos que dão origem aos objetos que compõem o sistema.
Padrões de Criação - Singleton:
- Garante que uma classe tem apenas uma instância e provê um ponto de acesso global a ela.
Quando usar o Singleton?
Use Singleton quando:
- 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.
- Em termos de padrões de criação de projetos, algumas classes, tais como um spooler de impressão ou um sistema de arquivos, devem ser instanciadas uma única vez e prover um ponto de acesso global a esta instância.
Padrões Estruturais - Adapter:
- Converte a interface de uma classe em outra interface que normalmente não poderiam trabalhar juntas.
- É utilizado para permitir que dois objetos se comuniquem mesmo que tenham interfaces incompatíveis
Quando usar Adapter?
Use o Adapter quando:
- Você quer usar uma classe existente, e sua interface não é adequada àquela que você precisa.
Padrões Estruturais - Bridge:
Desacopla uma interface de sua implementação, de forma que elas possam variar independentemente.
Quando usar Bridge?
Use o Bridge quando:
- Você quer evitar um vínculo entre a abstração e a implementação.
- Mudanças na implementação de uma abstração não deveriam ter impacto nos clientes, isto é, seu código não deveria ser recompilado.