São soluções prontas que padronizam a solução de problemas recorrentes.
- De criação(creational): que visam abstrair o processo de como objetos são criados na aplicação;
- Estruturais(structural): que lidam com a composição de classes e objetos;
- Comportamentais(behavioural): que caracterizam como as classes e objetos interagem, e distribuem responsabilidades na aplicação.
(Obs: Os padrões de projeto são apenas sugestões de código, ou seja, cada linguagem tem sua maneira de implementá-los. O que importa de fato é a forma de solucionar o problema.)
- Você naõ precisa reinventar a roda;
- Padrões universais facilitam o entendimento do seu projeto;
- Evita refatoração desnecessária;
- Ajuda na reutilização de código (conceito DRY - Don't repeat yourself);
- Abstrai e nomeia partes particulares do projeto;
- Ajuda na aplicação dos principios do design orientado a objetos (SOLID);
- Facilitam a criação de testes unitários.
- Alguns padrões podem ser complexos até que você os compreenda;
- Muito código para atingir um objetivo simples;
- Podem trazer otimizações prematuras para o seu código (YAGNI - You ain't gonna need it);
- Se usados incorretamente, podem atrapalhar ao invés de ajudar.
De criação | Estrutural | Comportamental |
---|---|---|
Abstract factory | Adapter | Interpreter |
Factory method | Bridge | Template method |
Builder | Composite | Chain of responsability |
Prototype | Decorator | Iterator |
Singleton | Façade | Command |
Flyweight | Mediator | |
Proxy | Memento | |
Observer | ||
State | ||
Strategy | ||
Visitor |
- Creational:
- Structural:
- Behavioural:
Esse projeto inteiro foi construído com o intuito de aprender e estudar os design patterns mais conhecidos na área de tecnologia. A documentação de cada design pattern assim como o exemplo prático de como o mesmo funciona foi retirado a partir da playlist do youtube criado por Otávio Miranda.