Design Patterns Flashcards
O que são Design Patterns?
Design Patterns ou padrões de projetos são soluções generalistas para problemas recorrentes durante o desenvolvimento de um software. Não se trata de um framework ou um código pronto, mas de uma definição de alto nível de como um problema comum pode ser solucionado.
Design Patterns?
Design patterns são modelos que já foram utilizados e testados anteriormente, portanto podem representar um bom ganho de produtividade para os desenvolvedores.
Seu uso também contribui para a organização e manutenção de projetos, já que esses padrões se baseiam em baixo acoplamento entre as classes e padronização do código.
Creational Design Patterns
Abstract Factory Builder Factory Method Prototype Singleton
Structural Design Patterns
Adapter Bridge Composite Decorator Façade Flyweight Proxy
Behavioral Patterns
Chain of Responsibility Command Interpreter Iterator Mediator Memento Observer State Strategy Template Method Visitor
Padrões arquiteturais
Interceptor Model View Controler (MVC) Model View ViewModel (MVVM) Model View Presenter (MVP) n-tier Specification Publish–subscribe Inversion of control
Outros Design Patterns
Rules Design Patterns Dependency Injection Intercepting filter Lazy loading Mock object Method chaining Inversion of control Unit of Work
Design Pattern Definição
Design patterns ou padrões de design são soluções já testadas para problemas recorrentes no desenvolvimento de software, que deixam seu código mais manutenível e elegante, pois essas soluções se baseiam em um baixo acoplamento.
Padrões do Design Patterns?
Padrões de Criação:Esses padrões de design fornecem uma maneira de criar objetos enquanto ocultam a lógica de criação, em vez de instanciar objetos diretamente usando o operador new. Isso dá ao programa mais flexibilidade para decidir quais objetos precisam ser criados para um determinado caso de uso;
•Padrões Estruturais:Esses padrões de design dizem respeito à classe e à composição do objeto. O conceito de herança é usado para compor interfaces e definir maneiras de compor objetos para obter novas funcionalidades;
•Padrões Comportamentais: Esses padrões de design se preocupam especificamente com a comunicação entre objetos;
Factory/ Fábrica
O padrão de fábrica é um dos padrões de design mais usados em Java. Esse tipo de padrão de design se enquadra no padrão criacional, pois fornece um maneira de criar um objeto;
No padrão Factory, criamos objetos sem expor a lógica de criação ao cliente e nos referimos ao objeto recém-criado usando uma interface comum;
Abstract Factory/ Fábrica Abstrata
Os padrões de fábrica trabalham em torno de uma super-fábrica que cria outras fábricas;
Esta fábrica também é chamada de fábrica de fábricas. Esse tipo de padrão de design se enquadra no padrão criacional, pois fornece um maneira de criar um objeto;
No padrão Abstract Factory, uma interface é responsável por criar uma fábrica de objetos relacionados sem especificar explicitamente suas classes. Cada fábrica gerada pode fornecer os objetos conforme o padrão de fábrica;
Singleton
O padrão Singleton é um dos padrões de design mais simples em Java. Esse tipo de padrão de design se enquadra no padrão criacional;
Esse padrão envolve uma única classe responsável por criar um objeto, assegurando que apenas um único objeto seja criado. Essa classe fornece uma maneira de acessar seu único objeto que pode ser acessado diretamente sem a necessidade de instanciar o objeto da classe;
Builder/ Construtor
O padrão Builder cria um objeto complexo usando objetos simples e usando uma abordagem passo a passo. Esse tipo de padrão de design se enquadra no padrão criacional;
Uma classe Builder cria o objeto final passo a passo. Este construtor é independente de outros objetos;
Prototype/ Protótipo
Padrão de protótipo refere-se à criação de objetos duplicados, mantendo o desempenho em mente. Esse tipo de padrão de design se enquadra no padrão criacional;
Esse padrão envolve a implementação de uma interface de protótipo que informa para criar um clone do objeto atual. Esse padrão é usado quando a criação do objeto diretamente é cara. Por exemplo, um objeto deve ser criado após uma operação cara do banco de dados. Podemos armazenar em cache o objeto, retornar seu clone na próxima solicitação e atualizar o banco de dados conforme e quando necessário, reduzindo assim as chamadas ao banco de dados
Adapter/ Adaptador
O padrão do adaptador funciona como uma ponte entre duas interfaces incompatíveis. Esse tipo de padrão de design se enquadra no padrão estrutural, pois combina a capacidade de duas interfaces independentes;
Esse padrão envolve uma única classe responsável por unir funcionalidades de interfaces independentes ou incompatíveis;
Um exemplo da vida real pode ser um caso de leitor de cartão que atua como um adaptador entre o cartão de memória e um laptop. Você pluga o cartão de memória no leitor de cartões e no leitor de cartões no laptop para que o cartão de memória possa ser lido via laptop;
Bridge / Ponte
É usado quando precisamos separar uma abstração de sua implementação para que as duas possam variar independentemente. Esse tipo de padrão de design se enquadra no padrão estrutural, pois desacopla a classe de implementação e a classe abstrata, fornecendo uma estrutura de ponte entre eles;
Esse padrão envolve uma interface que atua como uma ponte que torna a funcionalidade de classes concretas independente das classes do implementador de interface;
Ambos os tipos de classes podem ser alterados estruturalmente sem se afetarem
Filter/ Filtro
O padrão de filtro ou Criteria é um padrão de design que permite aos desenvolvedores filtrar um conjunto de objetos usando diferentes critérios e encadeando-os de maneira dissociada por meio de operações lógicas;
Esse tipo de padrão de design se enquadra no padrão estrutural, pois combina vários critérios para obter critérios únicos
Composite/ Composição
O padrão de composição é usado onde precisamos tratar um grupo de objetos de maneira semelhante a um único objeto. O padrão compõe objetos em termos de uma estrutura em árvore para representar parte e toda a hierarquia. Esse tipo de padrão de design se enquadra no padrão estrutural, pois cria uma estrutura em árvore do grupo de objetos;
Esse padrão cria uma classe que contém um grupo de seus próprios objetos. Esta classe fornece maneiras de modificar seu grupo dos mesmos objetos;
Decorator/ Decorador
O padrão decorador permite que um usuário adicione novas funcionalidades a um objeto existente sem alterar sua estrutura. Esse tipo de padrão de design se enquadra no padrão estrutural, pois atua como um invólucro para a classe existente;
Esse padrão cria uma classe decoradora que agrupa a classe original e fornece funcionalidade adicional, mantendo intacta a assinatura dos métodos de classe
Facade/ Fachada
O padrão de fachada oculta as complexidades do sistema e fornece uma interface para o cliente usando a qual o cliente pode acessar o sistema. Esse tipo de padrão de design se enquadra no padrão estrutural, pois adiciona uma interface ao sistema existente para ocultar suas complexidades;
Esse padrão envolve uma única classe que fornece métodos simplificados exigidos pelo cliente e delega chamadas para métodos de classes de sistema existentes;
Flyweight
O padrão Flyweight é usado principalmente para reduzir o número de objetos criados, diminuir o espaço ocupado na memória e aumentar o desempenho. Esse tipo de padrão de design se enquadra no padrão estrutural, pois fornece maneiras de diminuir a contagem de objetos, melhorando assim a estrutura do aplicativo;
O padrão Flyweight tenta reutilizar objetos do tipo semelhantes já existentes, armazenando-os e cria um novo objeto quando nenhum objeto correspondente é encontrado. O padrão será demonstrado desenhando 20 círculos de locais diferentes, mas criando apenas 5 objetos. Apenas 5 cores estão disponíveis, portanto, a propriedade color é usada para verificar os objetos Circle já existentes;
Proxy
No padrão de proxy, uma classe representa a funcionalidade de outra classe. Esse tipo de padrão de design está sob um padrão estrutural;•No padrão de proxy, cria-se um objeto que possui o objeto original para fazer interface de sua funcionalidade com o mundo exterior;
Chain of Responsibility/ Cadeia de Responsabilidade
Como o nome sugere, o padrão da cadeia de responsabilidades cria uma cadeia de objetos receptores para uma solicitação. Esse padrão desacopla o remetente e o destinatário de uma solicitação com base no tipo de solicitação. É um padrão comportamental;
Nesse padrão, normalmente cada receptor contém referência a outro receptor. Se um objeto não puder tratar a solicitação, ele passará para o próximo receptor e assim por diante;
Comando / Command
O padrão de comando é um padrão de design controlado por dados e se enquadra na categoria de padrão comportamental;
Uma solicitação é agrupada sob um objeto como comando e passada para o objeto Invoker. O objeto Invoker procura o objeto apropriado que pode tratar esse comando e passa o comando para o objeto correspondente que executa o comando;