3

Padrões de Projeto(Design Patterns)

#Desperte o potencial #Design Thinking #Arquitetura de Sistemas
Luiz Fischer
Luiz Fischer

Padrões de Projeto


Introdução


Hoje, falaremos um pouco sobre padrões de projetos, quais são eles, como são classificados e uma breve descrição. Neste artigo inicial, não irei me aprofundar muito sobre o que é cada um e como funciona. Nos próximos artigos irei explicar cada padrão separado e com mais detalhes.

Esses são padrões de projeto trazidos pelo GoF (Gang of Four - apelido que deram ao grupo dos quatro autores)Existem diversos outros. Além disso o GoF também propôs a classificação destes por escopo (classe ou objeto). By Matheus Silva. (Obrigado pelo acréscimo).


Padrões Criacionais


Estes padrões fornecem vários mecanismos de criação de objetos, que aumentam a flexibilidade e reutilização de código já existente.

 

  •        Factory Method
  •        Abstract Factory
  •        Builder
  •        Prototype
  •        Singleton


 

Factory Method é um padrão criacional de projeto que fornece uma interface para criar objetos em uma superclasse, mas permite que as subclasses alterem o tipo de objetos que serão criados.

 

Abstract Factory é um padrão de projeto criacional que permite que você produza famílias de objetos relacionados sem ter que especificar suas classes concretas.


Builder é um padrão de projeto criacional que permite a você construir objetos complexos passo a passo. O padrão permite que você produza diferentes tipos e representações de um objeto usando o mesmo código de construção.


O Prototype é um padrão de projeto criacional que permite copiar objetos existentes sem fazer seu código ficar dependente de suas classes.


Singleton é um padrão de projeto criacional que permite a você garantir que uma classe tenha apenas uma instância, enquanto provê um ponto de acesso global para essa instância.

 

Padrões estruturais


Estes padrões explicam como montar objetos e classes em estruturas maiores mas ainda mantendo essas estruturas flexíveis e eficientes.

 

  •        Adapter
  •         Bridge
  •         Composite
  •         Decorator
  •         Facade
  •         Flyweight
  •        Proxy

 

 

Adapter é um padrão de projeto estrutural que permite objetos com interfaces incompatíveis colaborarem entre si.

 

Bridge é um padrão de projeto estrutural que permite que você divida uma classe grande ou um conjunto de classes intimamente ligadas em duas hierarquias separadas—abstração e implementação—que podem ser desenvolvidas independentemente umas das outras.

 

Composite é um padrão de projeto estrutural que permite que você componha objetos em estruturas de árvores e então trabalhe com essas estruturas como se elas fossem objetos individuais.

  

Decorator é um padrão de projeto estrutural que permite que você acople novos comportamentos para objetos ao colocá-los dentro de invólucros de objetos que contém os comportamentos.

  

Facade é um padrão de projeto estrutural que fornece uma interface simplificada para uma biblioteca, um framework, ou qualquer conjunto complexo de classes.

 

 O Flyweight é um padrão de projeto estrutural que permite a você colocar mais objetos na quantidade de RAM disponível ao compartilhar partes comuns de estado entre os múltiplos objetos ao invés de manter todos os dados em cada objeto.

 

Proxy é um padrão de projeto estrutural que permite que você forneça um substituto ou um espaço reservado para outro objeto. Um proxy controla o acesso ao objeto original, permitindo que você faça algo ou antes ou depois do pedido chegar ao objeto original.

 

 

Padrões comportamentais


Estes padrões são voltados aos algoritmos e a designação de responsabilidades entre objetos.

 

  •         Chain of Responsability
  •         Command
  •         Iterator
  •         Mediator
  •         Memento
  •        Observer
  •         State
  •         Strategy
  •         Template Method
  •         Visitor

 

 

Chain of Responsibility é um padrão de projeto comportamental que permite que você passe pedidos por uma corrente de handlers. Ao receber um pedido, cada handler decide se processa o pedido ou o passa adiante para o próximo handler na corrente.

  

Command é um padrão de projeto comportamental que transforma um pedido em um objeto independente que contém toda a informação sobre o pedido. Essa transformação permite que você parametrize métodos com diferentes pedidos, atrase ou coloque a execução do pedido em uma fila, e suporte operações que não podem ser feitas.

  

Iterator é um padrão de projeto comportamental que permite a você percorrer elementos de uma coleção sem expor as representações dele (lista, pilha, árvore, etc.).

 

 O Mediator é um padrão de projeto comportamental que permite que você reduza as dependências caóticas entre objetos. O padrão restringe comunicações diretas entre objetos e os força a colaborar apenas através do objeto mediador.

 

Memento é um padrão de projeto comportamental que permite que você salve e restaure o estado anterior de um objeto sem revelar os detalhes de sua implementação.

 

Observer é um padrão de projeto comportamental que permite que você defina um mecanismo de assinatura para notificar múltiplos objetos sobre quaisquer eventos que aconteçam com o objeto que eles estão observando.

  

State é um padrão de projeto comportamental que permite que um objeto altere seu comportamento quando seu estado interno muda. Parece como se o objeto mudasse de classe.

  

Strategy é um padrão de projeto comportamental que permite que você defina uma família de algoritmos, coloque-os em classes separadas, e faça os objetos deles intercambiáveis.

  

Template Method é um padrão de projeto comportamental que define o esqueleto de um algoritmo na superclasse mas deixa as subclasses sobrescreverem etapas específicas do algoritmo sem modificar sua estrutura.

 

Visitor é um padrão de projeto comportamental que permite que você separe algoritmos dos objetos nos quais eles operam.

 

 


2
29

Comentários (3)

0
Felipe Alvarez

Felipe Alvarez

22/07/2021 11:06

Gostaria de agradecer o colega Luiz Fischer por escrever e compartir esse artigo. Vou acompanhar os próximos.


Sou novo no tema e estou procurando aprender mais.


Para quem está na mesma situação que eu, também vale a pena ver a aula sobre o tema no bloco 3 do curso "JavaScript ES6 essencial", aqui da DIO. O foco lá é no uso de padrões de projeto no java script, mas temos uma pincelada no contexto histórico da abordagem e alguns exemplos práticos do uso dos design patterns lá apresentados.


Seria interessante um curso mais aprofundado sobre o tema, aqui na DIO.

0
Wellington Santos

Wellington Santos

21/07/2021 11:50

Texto legal, gostei. Mas a tag Design Thinking tem a ver com UIX, não com padrões de projeto.

0
Mateus Silva

Mateus Silva

21/07/2021 11:28

Oi, Luiz. Muito legal o seu texto trazendo sobre os Padrões de Projeto.


Só vou fazer um acréscimo aqui para contribuir. Na realidade esses são apenas os padrões de projeto trazidos pelo GoF (Gang of Four - apelido que deram ao grupo dos quatro autores). Existem diversos outros. Além disso o GoF também propôs a classificação destes por escopo (classe ou objeto). Tem a classificação feita por Metsker e por ai vai.

Apaixonado por tecnologia.

Brasil