Design Patterns, descobrindo um pouco sobre o assunto

Criado - 30 de outubro de 2022

Atualizado - 1 de maio de 2023

Quando iniciamos um desenvolvimento de um software, normalmente encontrarmos alguns desafios, e percebemos que determinados problemas são recorrentes, mesmo em projetos diferentes, ai surge o Design Patterns ou Padrões de Projetos que nós ajuda a resolver esses problemas e superar os desafios, deixando seu código mas manutenível e elegante.

Por que aprender ?

São basicamente soluções que foram implementadas, testadas e comprovadas como eficazes para problemas comuns no design de software. Mesmo que você nunca se depare com esses problemas, conhecer padrões ainda é útil porque ensina como resolver todos os tipos de problemas usando princípios de design orientado a objetos e isso pode simplificar a forma de resolver problemas cotidianos ao desenvolver software.

Classificação

Podemos classificar por sua complexidade, nível de detalhe e escala de aplicabilidade para todo o sistema que está sendo projetado.

  • Expressões idiomáticas - Básicos e de baixo nível, geralmente se aplicam apenas a uma única linguagem de programação.
  • Padrões arquiteturais - Universais e de alto nível, pode-se implementar esses padrões em praticamente qualquer linguagem de programação. Diferentemente de outros padrões, eles podem ser usados para projetar a arquitetura de um aplicativo inteiro.

Podemos classificar todos os padrões por sua intenção ou propósito

  • Creation Patterns (padrões criacionais) - fornecem mecanismos de criação de objetos que aumentam a flexibilidade e a reutilização de código existente. (Iremos representar pela letra C)
  • Structural patterns ( padrões estruturais) - explicam como montar objetos e classes em estruturas maiores, mantendo as estruturas flexiveis e eficientes. (Iremos representar pela letra S)
  • Behavioral patterns (padrões comportamentais) - cuidam da comunicação eficaz e da atribuição de responsabilidade entre objetos. (Iremos representar pela letra B)

Abaixo uma imagem com os 23 padrões do GOF.

23 padroes do gof

Padrões Criacionais (Creational Patterns)

Abstract Factory

Permite produzir famílias de objetos relacionados sem especificar suas classes concretas. Fornecer uma interface para criar famílias de objetos relacionados ou dependentes por meio de uma única interface e sem que a classe concreta seja especificada. Isso permite novos tipos derivados de ser introduzidas sem qualquer alteração ao código que usa a classe base.

É muito similar ao factory method, a diferença que ele é uma fábrica de fábricas.

Builder

Permite construir objetos complexos passo a passo. O padrão permite produzir diferentes tipos e representações de um objeto usando o mesmo código de construção.

Factory Method

Fornece uma interface para criar objetos em uma superclasse, mas permite que as subclasses alterem o tipo de objeto que será criado.

Prototype

Permite copiar objetos existentes sem tornar seu código dependente de suas classes.

Singleton

Permite garantir que uma classe tenha apenas uma instância, enquanto fornece um ponto de acesso global a essa instância.

Padrões estruturais (Structural Design Patterns)

Adapter

Permite a colaboração de objetos com interfaces incompatíveis.

Bridge

Permite dividir uma classe grande ou um conjunto de classes estreitamente relacionadas em duas hierarquias separadas (abstração e implementação) que podem ser desenvolvidas independentemente uma da outra.

Composite

Permite compor objetos em estruturas de árvores e trabalhar com essas estruturas como se fossem objetos individuais.

Decorator

Permite anexar novos comportamentos aos objetos, colocando-os dentro de objetos especiais que contêm os comportamentos.

Facade

Fornece uma interface simplificada para uma biblioteca, uma estrutura ou qualquer outro conjunto complexto de classes.

Flyweight

Permite ajustar mais objetos à quantidade disponível de RAM, compartilhando partes comuns do estado entre vários objetos, em vez de manter todos os dados em cada objeto.

Proxy

Permite fornecer um substituto ou espaço reservado para outro objeto. Um proxy controla o acesso ao objeto original, permitindo que você execute algo antes ou depois que a solicitação chega ao objeto original.

Padrões comportamentais (Behavioral Design Patterns)

Chain of Responsibility

Permite passar solicitações ao longo de uma cadeia de manipuladores. Ao receber uma solicitação, cada manipulador decide processar a solicitação ou passá-la para o próximo manipulador na cadeia.

Command

Transforma uma solicitação em um objeto independente que contém todas as informações sobre a solicitação. Essa transformação permite parametrizar métodos com diferentes solicitações, atrasar ou enfileirar a execução de uma solicitação, e oferecer suporte a operações que podem ser desfeitas.

Interpreter

Avalia/interpreta as instruções escritas em uma gramática ou notação de idiomas.

Iterator

Permite percorrer elementos de uma coleção sem expor sua representação.

Mediator

Permite reduzir dependências entre objetos, o padrão restringe as comunicações diretas entre os objetos e os força a colaborar apenas por meio de um objeto mediador.

Memento

Permite salvar e restaurar o estado anterior de um objeto sem revelar os detalhes de sua implementação.

Observer

Permite definir um mecanismo de assinatura para notificar vários objetos sobre quaisquer eventos que ocorram no objeto que estão observando.

State

Permite que um objeto altere seu comportamento quando seu estado interno for alterado.

Strategy

Permite definir uma família de algoritmos, colocar cada um deles em uma classe separada e tornar seus objetos intercambiáves.

Template Method

Define o esqueleto de um algoritmo na superclasse, mas permite que as substitua etapas especificas do algoritmo sem alterar sua estrutura.

Visitor

Permite separar algoritmos dos objetos nos quais eles operam.

Carlos Stenzel profil

Author

Carlos Stenzel