Design Patterns
Compartilhar:

Os Design Patterns são modelos de código que resolvem problemas clássicos. Eles são soluções para problemas de design de software que você pode encontrar em aplicativos reais. Um padrão de design não é um código pronto em um aplicativo, mas é um modelo que pode ser usado para resolver um problema.

Os padrões de projeto são neutros em relação à linguagem, portanto, podem ser aplicados a qualquer linguagem que ofereça suporte à orientação a objetos.

Por que e quando devemos usar Design Patterns?

Os Design Patterns existem para ajudar os desenvolvedores. Eles nos permitem implementar soluções comprovadas para problemas conhecidos (outros desenvolvedores também usam essas soluções), economizando tempo e esforço no processo de implementação do código. Eles também definem palavras comuns para falar sobre questões específicas para tornar a comunicação mais fácil, por exemplo, você pode dizer “você pode usar a fábrica nesta situação” e outros desenvolvedores saberão o que precisam fazer.

Às vezes você não precisa de um padrão de design. É bom lembrar que só devemos usá-lo quando necessário. Cada padrão de design pode ser usado em uma situação específica, o que é um dos motivos pelos quais é importante entendê-los, pois você pode encontrar um problema conhecido na área de desenvolvimento de software e já existem boas soluções para resolvê-lo. Ele usa Design Patterns. Dessa forma você não precisa “reinventar a roda”, você pode apenas usar coisas que já existem e funcionam bem. Portanto, a melhor maneira de saber quando usá-lo é aprendendo e entendendo quais problemas cada padrão de projeto resolve.

Gangue dos Quatro ou Gang of Four (GoF)

Em 1995, quatro desenvolvedores, Erich Gamma, Richard Helm, Ralph Johnson e John Vlissides, também conhecido como “Group of Four” (GoF), publicaram o livro “Design Patterns: Elements of Reusable Object-Oriented Software“. Eles introduziram o conceito de padrões e propôs 23 padrões de projeto. Esses padrões de grupo de quatro (GoF) são geralmente considerados a base de todos os outros padrões e são divididos em
três grupos:

  • Criacional – Foco no processo de criação (construção) de objetos.
  • Estrutural – Trata da combinação de classes e objetos.
  • Comportamental – Descreve a maneira como as classes ou objetos interagem e atribuem responsabilidades.

Os elementos de um Design Pattern

O livro “Design Patterns” diz que os padrões têm quatro elementos básicos:

Nome – usado para descrever problemas de design, soluções e consequências.

Problema – Descreva quando precisamos aplicar o padrão, explique a pergunta e seu contexto.

Solução – descreva os elementos que compõem o design, relacionamentos, responsabilidades e colaboração. A solução não descreve a implementação específica, porque o padrão é como um modelo que pode ser aplicado a muitas situações diferentes, mas fornece uma descrição abstrata do problema de design e como o arranjo geral dos elementos (classes e objetos) o resolve.

Consequência – é o resultado do modo de aplicação.

A seguir está uma breve descrição de cada um dos 23 modos. Essas definições também vêm do livro GoF “Design Patterns”.

fullstack pro - sujeito programador

Padrão de Criação

Abstract Factory – fornece uma interface para criar famílias de objetos relacionados ou dependentes sem especificar suas classes concretas.

Build – Separa a construção de um objeto complexo de sua representação para que o mesmo processo de construção possa criar diferentes representações.

Factory Method ou Método de fábrica – define uma interface para criar um objeto, mas permite que as subclasses decidam qual classe instanciar. O Factory Method permite que uma classe adie a instanciação para as subclasses.

Prototype ou Protótipo – especifique os tipos de objetos a serem criados usando uma instância prototípica e crie novos objetos copiando este protótipo.

Singleton – Garanta que uma classe tenha apenas uma instância e forneça um ponto global de acesso a ela.

Leia também: Algoritmos e Lógica de Programação para Iniciantes

Padrão Estrutural

Adapter – converte uma interface de aula em outra interface esperada pelos clientes. O adaptador permite quão as classes trabalhem juntas condigno a interfaces incompatíveis.

Bridge – desacopla uma concentração de sua efetivação para quão as duas possam discrepar independentemente.

Composite – constituem objetos em estruturas de esquema para representar partes e hierarquias inteiras. O Composite permite quão os clientes gerenciem objetos individuais e composições de objetos de método uniforme.

Decorator – Atribui dinamicamente responsabilidades adicionais a um objeto. Os decoradores fornecem uma saída fléxil às subclasses para distender a funcionalidade.

Facade – fornece uma interface unificada para um propínquo de interfaces em um subsistema. Facade define uma interface de coeficiente transcendental quão restituição o subsistema fácil de usar.

Flyweight – usa a repartição para laborar com eficácia um vasto número de objetos específicos.

Proxy – fornece um suplente ou intervalo fechado para outro objeto para cronometrar a entrada a ele.

Padrão Comportamental

Chain of Responsibility – Evite acoplar o remetente da solicitação com seu receptor, fornecendo assim a vários objetos a oportunidade de processar a solicitação. O link recebe o objeto e passa a solicitação ao longo da cadeia até que o objeto o processe.

Command – Encapsula solicitações como objetos, permitindo parametrizar clientes com diferentes solicitações, filas ou solicitações de log e oferece suporte a operações de desfazer.

Interpreter – Dada uma linguagem, um intérprete que define uma representação gramatical e usa essa representação para interpretar frases nessa língua.

Iterator – Fornece uma maneira de acessar sequencialmente os elementos de um objeto agregado sem expor sua representação subjacente.

Mediator – Define um objeto que encapsula como um grupo de objetos interage. O mediador promove o acoplamento fraco evitando que os objetos se referenciem explicitamente uns aos outros e permite que você altere independentemente suas interações.

Memento – Sem violar o encapsulamento, capture e externalize o estado interno do objeto para que o objeto possa ser restaurado a esse estado posteriormente.

Observer – Define dependências um-para-muitos entre objetos de forma que quando um objeto muda de estado, todas as suas dependências são automaticamente notificadas e atualizadas.

State – Permite que um objeto mude seu comportamento quando seu estado interno muda. O objeto parece mudar de classe.

Strategy – Defina uma série de algoritmos, encapsule cada algoritmo e torne-os intercambiáveis. Essa estratégia permite que o algoritmo mude independentemente de quais clientes o usam.

Template Method – define o esqueleto do algoritmo em operação, adiando algumas etapas para as subclasses. O método do modelo permite que as subclasses redefinam certas etapas do algoritmo sem alterar a estrutura do algoritmo.

Visitor – Indica a operação a ser executada nos elementos da estrutura do objeto. Os visitantes permitem que você defina novas operações sem alterar a classe dos elementos nos quais operam.

Conclusão

Os Design Patterns podem nos ajudar como desenvolvedores. Claro, como usá-los também tem uma curva de aprendizado inicial, mas uma vez que você os aprenda, eles podem tornar sua vida mais fácil. Em artigos futuros, mostrarei exemplos de como usamos alguns desses padrões.

Postages Relacionadas

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *