GoF Design Patterns


Gang of Four

  • São os 4 autores do livro Design Patterns: Elements of Reusable Object-Oriented Software
  • Foram pensados para a Programação Orientada a Objetos
  • Os padrões são divididos em 3 categorias:
    • Creational: Visam abstrair o processo de como objetos são criados na aplicação
    • Structural: Lidam com a composição de classes e objetos
    • Behavioural: Caracterizam como as classes e objetos interagem e distribuem responsabilidades na aplicação
  • São apenas sugestões, não regras universais
  • Nem todas as linguagens possuem todos os recursos recomendados, como interfaces, classes abstratas etc.

Vantagens

  • Já são casos conhecidos, assim cê não vai precisar reinventar a roda
  • Facilita o entendimento do software, uma vez que são padrões universais conhecidos
  • Evita refatoração desnecessária
  • Reutilização de código DRY (Don’t Repeat Yourself)
  • Abstrai e nomeia partes particulares do projeto
  • Aplica princípios/conceitos de SOLID na Orientação a Objetos
  • Facilita a construção de Teste Unitários

Desvantagens

  • Curva de aprendizado
  • Overengineering, muito código para um objetivo simples
  • Otimizações prematuras, YAGNI (You Ain’t Gonna Need It)
  • Se aplicado em um contexto errado, mais vai atrapalhar do que ajudar

Creational Design Patterns

  • Há 5 padrões de design nessa categoria de Criação:
    • Singleton
    • Factory
    • Abstract Factory
    • Builder
    • Prototype

Singleton

O que é?

  • Um design pattern que possui essas principais características:
    • Restrige a somente uma instância de uma classe
    • A instância só é criada ao ser chamada explicitamente
    • Não passa parâmetros na criação (método construtor)
    • Objeto pode ser acessada globalmente para toda aplicação
  • Normalmente o método construtor é privado
  • Pode limitar o acesso simultâneo a um recurso compartilhado
  • Possui um método chamado getInstance
    • Responsável na criação do objeto
    • Retorna o novo objeto (caso for a primeira instância)
    • Se a classe já tenha sido instanciada, é retornado o objeto existente

Casos de Uso

  • Três casos mais comuns de uso desse design pattern:
  1. Sistema de logs
    • Sempre jogando os logs no mesmo objeto
  2. Conexão única ao banco de dados
    • Instância única que possui acesso ao banco de dados
    • Garante que não haja novas instâncias
    • Assim, impedindo que novas conexões sejam estabelecidas
  3. Acesso ao sistema de arquivos de um sistema
    • Criando ponto único de acesso para modificação de arquivos
    • Impedindo alteração simultânea de um arquivo

Link ao original


Structural Design Patterns

  • Há 7 padrões de design nessa categoria Estrutural:
    • Adapter
    • Composite
    • Proxy
    • Flyweight
    • Facade
    • Bridge
    • Decorator

Behavioural Design Patterns

  • Há 11 padrões de design nessa categoria Comportamental:
    • Template Method
    • Mediator
    • Chain of Responsability
    • Observer
    • Strategy
    • Command
    • State
    • Visitor
    • Interpreter
    • Iterator
    • Memento