---
title: Design Patterns
localeTitle: Padrões de design
---
## Padrões de design

Programadores e arquitetos de software usam padrões de projeto para resolver problemas **comuns e recorrentes** na arquitetura de software. Os padrões fornecem uma abordagem agnóstica de linguagem **para programação orientada a objetos** que ajuda os desenvolvedores a seguir os princípios de um bom design de aplicativo.

### Por que padrões de design?

O desenvolvimento de padrões de design oferece várias vantagens:

*   É mais fácil seguir bons princípios de programação, como os **[princípios](https://medium.com/@cramirez92/s-o-l-i-d-the-first-5-priciples-of-object-oriented-design-with-javascript-790f6ac9b9fa)** do **[SOLID](https://www.youtube.com/watch?v=XzdhzyAukMM) .**
*   Ele mantém pedaços de código menores, então o código é mais fácil de **testar** e **depurar**
*   Ele ajuda a manter o código fracamente acoplado, para que o código seja mais fácil de **reutilizar** e **atualizar** para novos aplicativos
*   Torna o código mais fácil de **entender** , por isso os novos contribuidores podem **aumentar rapidamente**

Usar padrões de design incorre em alguns trade-offs e desenvolvedores novatos na prática devem lembrar-se do seguinte:

*   Não **há balas de prata** na programação e os padrões de design não são uma exceção
*   Padrões de design adicionam uma **camada de abstração** ao código, o que aumenta o esforço inicial de design e desenvolvimento
*   O uso excessivo de padrões de design ou a necessidade de ajustá-los torna o código **mais difícil** de entender

### Suporte de linguas

Padrões de design originados do mundo de linguagens estaticamente tipadas como C ++, Java e C #. A maioria dos recursos sobre desenvolvimento por padrão de design é baseada em um desses idiomas.

No entanto, os padrões de design são apenas isso: padrões. Eles **não** são **implementações** , como classes ou interfaces, e **não** são **restritos a nenhum idioma** .

Ao aprender padrões de design dentro de uma linguagem dinâmica, se padrões particulares parecerem desnecessariamente complexos ou contra-intuitivos, lembre-se de suas origens. Os desenvolvedores em linguagens dinâmicas ainda podem usar e se beneficiar dos padrões de design, embora mais pesquisas possam ser necessárias para compreendê-los completamente.

### Usos

Padrões de design são excelentes para resolver problemas de codificação fundacional de forma simples e repetitiva. Em geral, eles se enquadram em três categorias:

*   Padrões **criativos** descrevem como criar novos objetos
*   Padrões **estruturais** descrevem como compor objetos de outros objetos
*   Padrões **comportamentais** descrevem como os objetos se comunicam entre si

Todas essas tarefas podem ser executadas sem padrões de design, mas os padrões de design **reduzem o risco de** violar boas práticas e criar códigos de difícil manutenção.

#### Mais Informações:

*   Os [padrões de design de](https://github.com/kamranahmedse/design-patterns-for-humans) Kamran Ahmed [para humanos](https://github.com/kamranahmedse/design-patterns-for-humans) é uma excelente introdução aos padrões específicos
*   [Design Patterns](https://en.wikipedia.org/wiki/Design_Patterns) é o livro que iniciou esta prática
*   Os [Padrões de Arquitetura de Aplicativos Corporativos de](https://martinfowler.com/eaaCatalog/) Martin Fowler fornecem um conjunto de padrões mais sofisticados para aplicativos corporativos
*   O Sourcemaking fornece um [recurso online](https://sourcemaking.com/design_patterns) com exemplos adicionais e informações sobre padrões de design