Java

Design Patterns


Design patterns (padrões de projeto) são uma coleção de soluções abstratas para problemas recorrentes no desenvolvimento de software orientado a objetos. Essas soluções são apresentadas na forma de templates que podem ser aplicados em diferentes situações e diferentes linguanges de programação, porém com estrutura similar, provendo uma solução que contribui para a flexibilidade, extensibilidade, portabilidade e reúso de código da aplicação.

Elementos de um Design Pattern

Em geral, um design pattern possui quatro elementos essenciais:

  • Nome: Um identificador que podemos usar para descrever um problema de design, suas soluções em problemas em uma palavra ou duas. Possibilita a comunicação com os colegas e criação de documentação.
  • Problema: descreve quando aplicar o padrão, explicando o respectivo problema e contexto. As vezes o problema irá incluir uma lista de premissão que devem ser atendidas para que faça sentido aplicar o padrão.
  • Solução: descreve os elementos de design que resolvem o problema, seus respectivos relacionamentos, responsabilidades e colaborações. Descreve como distribuir estes elementos para resolver o problema.
  • Consequências: descreve os resultados e as consequências de aplicar o padrão. As consequências geralmente consistem em efeitos de espaço e tempo, e em algumas vezes, problemas relacionados a linguagem e implementação, tornando-se assim, um ponto crítico a se considerar ao avaliar uma alternativa de design.

Organização dos Design Patterns

Os design patterns podem ser divididos em três tipos:

  • Criacional: abstrai o processo de instanciação. O modo como os objetos são criados, compostos e representados torna-se independente do sistema, por esconder seus detalhes de implementação sob a utilização de herança, trazendo ampla flexibilidade e afastando a complexidade de um processo de instanciação de objetos.
  • Estrutural: se interessam em como classes e objetos são compostos em estruturas maiores. Eles descrevem maneiras de compor objetos para realizar novas funcionalidades, sem adicionar complexicidade e garantindo a flexibilidade, evitando assim classes do tipo “Frankenstein”.
  • Comportamental: são focados em algorítmos e na designação de responsabilidades entre objetos. Eles caracterizam fluxos de controle complexos que são difíceis de acompanhar em tempo de execução, para então tirar seu foco deste fluxo e deixá-lo concentrar-se somente na forma que que os objetos se comunicam um com os outros.

Lista de Design Patterns

Irei fazer uma compilação dos design patterns dividindo-os em seus três tipos e atualizando a lista abaixo com links. A lista é baseada no GoF (Gang of Four, autores do livro Design Patterns: Elements of Reusable Object-Oriented Software) e em outras ótimas fontes complementares sobre o assunto.

Criacionais

  • Abstract Factory
  • Builder
  • Factory Method
  • Prototype
  • Service Locator
  • Singleton

Estruturais

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

Comportamentais

  • Chain of Responsability
  • Command
  • Double Dispatch
  • Hook Classes
  • Hook Method
  • Interpreter
  • Iterator
  • Mediator
  • Memento
  • Null Object (Novo!)
  • Observer
  • State
  • Strategy
  • Template Method
  • Visitor

Quaisquer sugestões são bem vindas!
Espero que ajude, até mais!

bgasparotto

Recent Posts

Python function decorator

This guide will show you how to create a Python function decorator with a few…

2 years ago

Got permission denied while trying to connect to the Docker daemon socket

This guide will show you how to fix the error Got permission denied while trying…

2 years ago

Python virtual environment on Intellij IDEA

This guide will show you how to create a Python virtual environment on Intellij IDEA…

2 years ago

Find and kill processes on Linux and Mac by port number

This tutorial will quickly show you how to to find and kill processes on Linux,…

2 years ago

Python: Relocation R_X86_64_PC32 against symbol can not be used when making a shared object Error

This guide shows a possible solution for Python error Relocation R_X86_64_PC32 against symbol can not…

2 years ago

Kubernetes useful commands

I condensed below a cheat sheet of Kubernetes useful commands. I will keep updating this…

2 years ago