Os Design Patterns, ou padrões de projeto, são soluções já modeladas para problemas comuns à um projeto.
Esses padrões de projetos não tratam, especificamente, de reutilização de código, mas sim de uma padronização da modelagem, o que facilitará a documentação e também a vida de outros programadores, por já saberem “onde está cada coisa”.
Existem vários design patterns, e cabe ao analista associar qual é o melhor para cada projeto.
Na verdade, raramente um projeto é implementado somente com um padrão, já que esses tem um certo tipo de relacionamento e, quanto maior o conhecimento do desenvolvedor sobre padrões, mais eficiente será sua modelagem.
Contudo é importante reforçar que a aplicação de um padrão em seu projeto, seja ele qual for, não garante que sua modelagem é eficiente. Mais do que isso, nessa hora a experiência e conhecimento sempre vão ser fatores mais relevantes.
Os padrões de projeto podem ser dividos em:
Padrões de Comportamento
Os Design Patterns classificados como padrões de comportamento tratam de algoritmos que focam nas relações entre os objetos, a fim de melhorar a comunicação entre os mesmos.
Para compartilhar um mesmo tipo de comportamento entre classes diferentes eles fazem o uso de heranças de interfaces e classes abstratas, principalmente.
Os principais padrões de comportamento são:
- Chain of Responsibility
- Command
- Decorator
- Interpreter
- Iterator
- Mediator
- Memento
- Observer
- State
- Strategy
- Template Method
- Visitor
Padrões de Criação
Os processos de criação são responsáveis por “adiar” a criação de objetos. Sua missão principal é então abstrair o processo de criação de objetos a partir da instanciação de classes.
Esses padrões tem como característica o fato do sistema se comunicar com os objetos por meio de classes abstratas, dando maior flexibilidade à criação.
Alguns dos principais padrões de criação são:
- Abstract Factory
- Builder
- Factory Method
- Prototype
- Singleton
Padrões Estruturais
Os padrões estruturais tratam a maneira como objetos e classes estão dispostos em um projeto a fim de formar estruturas mais complexas.
Assim como nos padrões comportamentais, a utilização de interface e classes abstratas em heranças é também muito comum.
Podemos dizer que seu foco é obter flexibilidade no código, alterando e “adicionando funcionalidades” em tempo de execução.
Os principais padrões estruturais são: