Design Patterns Flashcards
Quais as 3 classificações dos padrões de projeto?
- Criação: objetivo de abstrair a instanciação de objetos.
- Estruturais: organizar a estrutura das classes e os relacionamentos entre classes e objetos.
- Comportamentais: atuam diretamente na delegação de responsabilidades, definindo como os objetos devem se comportar e se comunicar.
Quais os padrões de criação?
Abstract Factory - Um método Factory é um método que fabrica objetos de um tipo particular; Um objeto Factory é um objeto que encapsula métodos Factory.
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 representações.
Factory Method - É uma interface para instanciação de objetos que mantém isoladas as classes concretas usadas da requisição da criação destes objetos.
Prototype - O padrão Prototype fornece uma outra maneira de se construir objetos de tipos arbitrários.
Singleton - Garante que para uma classe específica só possa existir uma única instância, a qual é acessível de forma global e uniforme.
Quais os padrões estruturais?
Adapter - Permite que dois objetos se comuniquem mesmo que tenham interfaces incompatíveis.
Bridge - Desacopla a interface da implementação ; Ocultação de detalhes de implementação dos clientes.
Composite - lida com uma estrutura de elementos agrupada hierarquicamente (não como meras coleções).
Decorator - Atribui responsabilidade adicionais a um objeto dinamicamente. O Decorator fornece uma alternativa flexível a subclasses para a extensão da funcionalidade.
Facade - Interface unificada para um subsistema ; Torna o subsistema mais fácil de usar.
Flyweight - Usa compartilhamento para dar suporte a vários objetos de forma eficiente.
Proxy - Fornece um objeto representante ou procurador de outro objeto para controlar o acesso ao mesmo.
O que são anti-patterns?
São soluções recorrentes para problemas comuns que, na prática, causam mais problemas do que resolvem. Ou seja, são más práticas que podem parecer boas ideias no início, mas que acabam gerando código confuso, difícil de manter ou com baixo desempenho.
Exemplos de anti-patterns
-
God Object (Objeto Deus)
- Problema: Criar uma classe que faz “tudo” dentro do sistema, acumulando muitas responsabilidades.
-
Spaghetti Code (Código Espaguete)
- Problema: Código sem organização, com lógica confusa e interdependente.
-
Copy-Paste Programming
- Problema: Copiar e colar código repetidamente sem refatorar.
-
Cargo Cult Programming
- Problema: Implementar padrões ou tecnologias sem entender o motivo, apenas porque são populares.
-
Golden Hammer (Martelo de Ouro)
- Problema: Tentar resolver todo tipo de problema com a mesma ferramenta ou tecnologia.
-
Hardcoded Values
- Uso de valores fixos dentro do código em vez de variáveis configuráveis.
-
Magic Number
- Uso de números aleatórios no código sem explicação.
Quais os padrões comportamentais?
-
Chain of Responsability
- Evita o acoplamento do remetente de uma solicitação ao seu receptor. Encadeia os objetos receptores, passando a solicitação ao longo da cadeia até que um objeto a trate.
- Ex: filtros de requisições, tratamento de eventos.
-
Command
- Encapsula uma requisição como um objeto, deixando-o,dessa forma, parametrizar os clientes com diferentes requisições.
- Ex: sistemas de menu, desfazer/refazer ações.
-
Iterator
- Fornece um meio de acessar sequencialmente os elementos de um objeto agregado sem expor a sua estrutura interna.
- Ex: loops sobre listas, arrays, etc.
-
Mediator
- Centraliza a comunicação entre objetos, reduzindo o acoplamento direto. Define um objeto que encapsula a forma como um conjunto de objetos interage. Promove o acoplamento fraco ao evitar que os objetos se refiram explicitamente uns aos outros.
- Ex: sistemas de chat, controladores de interface gráfica.
-
Memento
- Salva e restaura o estado anterior de um objeto sem expor sua implementação.
- Ex: funcionalidade “desfazer” (undo).
- Observer
- Define uma dependência entre objetos de forma que quando um objeto muda de estado, todos os seus dependentes são notificados e atualizados automaticamente.
- Ex: notificações, sistemas de eventos.
-
State
- Permite que um objeto mude o seu comportamento quando o seu estado interno muda. O objeto parecerá ter mudado de classe.
- Ex: máquinas de estado, caixas eletrônicos.
-
Strategy
- Define uma família de algoritmos, encapsula cada um, e faz deles intercambiáveis.
- Ex: algoritmos de ordenação, autenticação
-
Visitor
- Representa uma operação a ser executada sobre os elementos da estrutura de um objeto. Permite definir uma nova operação sem mudar as classes dos elementos sobre os quais opera.