--- 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