Programação
O que são design patterns
No desenvolvimento de software, um design pattern (padrão de projeto, em português) é uma solução geral que pode ser aplicada em determinados problemas que ocorrem durante a arquitetura de um software. Um design pattern não é um punhado de código que pode ser aplicado em qualquer projeto com um simples Ctrl+c/Ctrl+v, e sim uma descrição ou um modelo de como resolver um determinado problema que pode acontecer em diferentes tipos de situação durante a criação de um sistema.
As vantagens de utilizar design patterns
Os padrões de projeto podem aumentar a velocidade de desenvolvimento de um software, pois permitem paradigmas de desenvolvimento testados e que funcionam para resolver um determinado problema geral.
Além de tudo, os padrões ajudam os desenvolvedores a se comunicarem bem durante o processo de desenvolvimento, pois eles funcionam como um idioma para programadores, quando toda a equipe conhecem bem todos os padrões de projeto mais famosos, fica muito mais fácil dizer: “Ei programador X eu quero que você crie um Singleton nessa determinada parte do sistema”, ou “Oi gerente, para desenvolver esta parte do programa nos utilizamos um Observable”.
Singleton e Observable são dois design patterns. Quando todos entendem o sentido dessas palavras, a comunicação fica muito mais rápida e direta. Sem contar que design patterns podem ser modificados e aprimorados para se adaptar ao contexto de um sistema.
Tipos de design patterns
Hoje em dia existem muitos padrões de projetos. Para organizá-los melhor e facilitar a vida dos programadores, eles forem divididos em 3 grandes categorias. Os padrões criacionais, estruturais e comportamentais. Vamos ver cada um deles agora.
Padrões criacionais
Os designs patterns dessa categoria são todos referentes a criação de objetos. Em outras palavras, os padrões criacionais focam em soluções no processo de instanciação de objetos. Abaixo veja os mais populares desta categoria:
- Builder
Separa a construção de um objeto complexo de sua representação. Então o mesmo processo de construção pode criar diferentes representações de um determinado objeto.
- Object Pool
Focado na economia de memória e de processamento por parte de um software; funciona como um armazém de objetos já instanciados que você pode acessar em qualquer momento durante a execução do programa, sempre reutilizando estes mesmos objetos. Este padrão pode trazer um aumento significante de performance para um software. Ele é mais efetivo em situações quando o custo de instanciação de uma classe é muito alto(classes complexas), e o número de instanciação desta classe também é alta.
- Factory
Um “Builder” mais simples que visa criar diferentes representações de uma mesma classe.
- Singleton
Assegura que uma classe tenha somente uma instância, ou seja, que exista somente uma cópia daquela classe durante a execução de um programa, e que você tenha um ponto de acesso global a mesma.
Padrões estruturais
Estes padrões são focados em resolver problemas sobre composição de classes e objetos. Além disso eles são divididos em dois tipos, estruturação de classes e estruturação de objetos. O primeiro tipo usa herança para compor interfaces de classes, já o segundo define maneira de compor objetos para obter novas funcionalidades, geralmente em tempo de execução. Abaixo veja os mais populares desta categoria:
- Facade
Facade significa fachada em português. O próprio nome é quase autoexplicativo, pois uma facade busca agregar todo um sistema complexo que envolve diversas classes em uma única classe, escondendo toda a complexidade do sistema real. É ótimo para organizar melhor um projeto.
- Adapter
Permite com que classes completamente diferentes se comuniquem com um mesmo cliente apenas com uma interface em comum. Muito útil para diminuir o acoplamento em um projeto.
- Decorator
Adiciona funcionalidades em objetos em tempo de execução.
Padrões comportamentais
Esses padrões são focados em resolver problemas de comunicação entre objetos, abaixo veja os mais populares:
- Observer
Funciona como um notificador, sempre quando um objeto específico tem seu estado alterado outras classes atreladas a esta são notificadas.
- Memento
Salva e recuperar um estado antigo de um objeto.
- State
Altera o comportamento de um objeto quando seu estado é alterado.
Quando saber quando usar um design pattern
Como você viu cada padrão citado acima pode ser aplicado para resolver diferentes tipos de problemas, mas muitas pessoas têm dúvidas de como saber quando usar um design pattern em uma parte de um projeto, e a resposta é simples.
Estude a maior quantidade possível de padrões, estude suas aplicações e soluções, com esse conhecimento você vai saber naturalmente quando utilizar ou não utilizar um padrão em um problema que aparecer no seu projeto.
Conclusão
Agora que você sabe o que são padrões de projetos e suas vantagens e como eles podem ajudar seu time e melhorar a qualidade do seu software, está na hora de por a mão na massa e começar a estudar os mais famosos. Aqui na School of Net, temos um curso completo que ensina como trabalhar com padrões de projetos no PHP.