O que são Design Patterns e qual a sua importância?
Tags: programming, designpatterns
Published: 2022-03-28 12:57:16

Se você é uma pessoa desenvolvedora de software, sem dúvidas, você já se deparou com o termo **Design Patterns ou padrões de projeto** em algum requisito de vaga de emprego. 
![Imagem com requisito de uma vaga solicitando conhecimento em Design Patterns](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0s42m45779zmyxw6iel8.png)
![Imagem com requisito de uma vaga solicitando conhecimento em Design Patterns](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sn3t7b15z4h7oimb2mxq.png)


## O que são Design Patterns ? 
Design Patterns, traduzindo, Padrões de Projeto são soluções criadas por desenvolvedores para resolver problemas que sempre foram encontrados durante o desenvolvimento de software orientados a objeto! 

Se você já sentiu a sensação de resolver o mesmo problemas diversas vezes da mesma forma, durante a sua jornada como desenvolvedor saiba que padrões de projeto nasceram dessa sensação. 

Durante anos diversos programadores notaram que resolviam os mesmos problemas de diversas formas ou até de formas muito parecidas e por este motivo eles decidiram compartilhar esses seus padrões, criando dessa forma os famosos Design Patterns. 

## Por quê aprender Design Patterns? 

Aprender Design Patterns é importante para facilitar a sua vida como programador para resolver problemas encontrados previamente por outros desenvolvedores! Por ser um padrão, é algo que já foi **testado e validado** pela comunidade de desenvolvedores. 


## Do que é feito um padrão ?

Um padrão de projetos possui alguns itens essenciais para sua existência, sendo eles:

**Nome:** Uma referência do problema encontrado em um projeto.

**Problema:** Uma descrição de em quais cenários utilizar o padrão de projeto, este item deve explicar o contexto e o motivo do problema.

**Solução:** Este tópico mostra a resolução do problema através da implementação do padrão de projeto, apresentando de forma abstrata e apresentando um arranjo geral de elementos que resolve o problema, como as classes, objetos, interfaces e afins.

**Consequências:** Este item mostra as consequências positivas e negativas da implementação deste padrão de projeto. Este tópico é importante para que o desenvolvedor avalie se a implementação será benéfica ou não no seu contexto. 

## Como funciona? 

Existem mais de 20 padrões de projetos catalogados! Atualmente os padrões de projeto são divididos em três categorias, sendo elas:

- _Padrões criacionais_: são padrões direcionados para a criação de objetos que aumentam a flexibilidade e a reutilização de código. 

- _Padrões estruturais_: são padrões que mostram como montar classes e objetos maiores de uma forma flexível e eficientes

- _Padrões comportamentais_: são padrões que cuidam da comunicação eficiente e da divisão de responsabilidade entre objetos

## Design Patterns são a solução pra tudo ?

**Não!!!**

Design Patterns foram criados anos atrás e em algumas linguagens modernas certos padrões de design já são implementados! 

Por exemplo, o padrão Strategy pode ser implementado com uma simples função anônima (lambda) na maioria das linguagens de programação moderna.

Um ponto muito importante é que é necessário **analisar** se realmente é necessário a implementação de determinado padrão, as vezes ao implementar um padrão você poderá adicionar mais complexidade ao código do que de fato resolver um problema. 

## Como começar a utilizar Design Patterns

Acredito que o primeiro passo para utilizar os padrões de projeto é **conhecer** cada um deles, dessa forma você vai conseguir entender a ideia e sua aplicabilidade! 

Após isso tente imaginar em algum de seus projetos pessoal ou de estudo se é válido a implementação de algum padrão! 

Se você trabalha, tente levar essa discussão para seu trabalho e alinhar com sua equipe sobre a implementação de algum Padrão de Projeto para **resolver** um **problema real**.

## Indicações de materiais! 

Caso você tenha se interessado sobre Design Patterns, gostaria de compartilhar alguns links úteis! 

- [Refactoring Guru](https://refactoring.guru/pt-br): O site possui a explicação de cada Design Patterns, qual o melhor cenário para a implementação e também os exemplos de implementação em diversas linguagens de Programação. 

- [Padrões de Projeto - Soluções reutilizáveis de software Orientado a Objetos](https://www.amazon.com.br/Padr%C3%B5es-Projetos-Solu%C3%A7%C3%B5es-Reutiliz%C3%A1veis-Orientados/dp/8573076100) : Este livro é o **principal** livro relacionado a Padrões de Projeto, devido ao longo nome ele foi apelidado como “o livro da Gangue dos Quatro (Gang of Four)” que logo foi simplificado para o “livro GoF”. Este livro possui detalhes sobre Design Pattern, a implementação de cada um deles, caso de usos, pontos positivos, pontos negativos e também sobre boas práticas de programação. Sem dúvidas este **não** é um livro para ler apenas uma vez mas sim um livro para ir consultando sempre que necessário.

- [Slides: Padrões de Projeto: Facade em Linguagens Dinâmicas](https://speakerdeck.com/marcelgsantos/padroes-de-projeto-facade-em-linguagens-dinamicas) : Estes são os slides do [Marcel dos Santos](), um grande colega, entusiasta de tecnologia e um das minhas referências em tecnologia. Neste slide ele apresenta uma ideia geral sobre padrões de projeto e explica sobre o padrão Facade! 

- [Thread sobre Chain of Responsability](https://twitter.com/devnic_/status/1494365203349258243) : Realizei a implementação de um Design Patterns no trabalho e resolvi criar uma thread no meu [Twitter](https://twitter.com/devnic_) exemplificando a implementação deste Pattern passo a passo. 


Por fim, gostaria de agradecer a você que leu até aqui! Se possível compartilhe este conteúdo na sua rede de social e para seus colegas de trabalho caso ache relevante.

Gostaria também de agradecer aos [Marlon](https://twitter.com/MarlonHenq) e ao [Joe](https://www.linkedin.com/in/joe-santos-6b819b185/) quem se disponibilizaram para realizar a revisão deste artigo!