O que são Design Patterns e como podemos nos beneficiar deste conceito?
Published: 2023-02-23 02:25:45

Design Patterns (Padrões de projeto) são soluções típicas para problemas comuns no projeto de software. Eles são como projetos pré-fabricados que você pode personalizar para resolver um problema de design recorrente em seu código.

Você não pode simplesmente encontrar um padrão e copiá-lo em seu programa, da mesma forma que faria com funções ou bibliotecas disponíveis no mercado. O padrão não é um pedaço específico de código, mas um conceito geral para resolver um problema particular. Você pode seguir os detalhes do padrão e implementar uma solução que se adapte às realidades do seu próprio projeto.

Os padrões são frequentemente confundidos com algoritmos, porque ambos os conceitos descrevem soluções típicas para alguns problemas conhecidos. Enquanto um algoritmo sempre define um conjunto claro de ações que podem atingir algum objetivo, um padrão é uma descrição de nível mais alto de uma solução. O código do mesmo padrão aplicado a dois programas diferentes pode ser diferente.

Uma analogia que explica muito bem isso é a de cozinhar:
Naturalmente cozinhar é a execução de uma lista de etapas que se forem bem executadas atingem o objetivo de preparar um determinado alimento.

O padrão (Design Patterns), é a representação da organização de todos os itens da cozinha, incluindo os itens que serão preparados, utensílios e todo e qualquer item da cozinha.

Imagine que um cozinheiro comece a fazer um determinado prato, ao executar metade das etapas ele se ausenta e um segundo cozinheiro entra no seu lugar a fim de terminar a execução do mesmo, se a cozinha estiver desorganizada ou organizada de uma forma pouco produtiva bem provavelmente o segundo cozinheiro pode ter dificuldades na execução das próximas etapas mesmo que depois possa contornar esta situação. 

A organização destes itens determina o grau de eficiência e até o resultado da comida.

Assim como em uma cozinha, um projeto deve ter um padrão de organização que possa ser de fácil entendimento a outros desenvolvedores, fazendo isso naturalmente o projeto fica mais eficiente e com sua manutenção mais facilitada.

**Padrões de design para humanos!**

De acordo com o Wikipedia: 

"Na engenharia de software, um padrão de projeto de software é uma solução geral reutilizável para um problema comum dentro de um determinado contexto no projeto de software. Não é um projeto acabado que pode ser transformado diretamente em código-fonte ou código de máquina. É uma descrição ou modelo de como resolver um problema que pode ser usado em muitas situações diferentes."

**ATENÇÃO**: 
- Padrões de projeto não são como uma bala de prata para todos os seus problemas.

- _Não tente forçá-los_; coisas ruins devem acontecer, se assim for feito.

- Lembre-se de que os padrões de projeto são soluções para problemas, não soluções para encontrar problemas; então não pense demais.

- Se usados no local correto e de maneira correta, eles podem ser um salvador; ou então eles podem resultar em uma confusão horrível de código.

**Padrões de design criacional**

Em palavras simples, padrões de criação são focados em como instanciar um objeto ou grupo de objetos relacionados.



De acordo com Wikipedia:

"Na engenharia de software, os padrões de design criacional são padrões de design que lidam com mecanismos de criação de objetos, tentando criar objetos de maneira adequada à situação. A forma básica de criação de objetos pode resultar em problemas de design ou aumentar a complexidade do design. Os padrões de design criacional resolvem esse problema controlando de alguma forma a criação desse objeto."