Padrões de Projeto

Repositório de estudos sobre o catálogo de padrões de projetos definido no livro Design Patterns: Elements of Reusable Object-Oriented Software, escrito pela Gang of Four (GoF).

Padrões Criacionais

Padrão Descrição Status
Abstract Factory Fornece uma interface para criação de famílias de objetos relacionados ou dependentes sem especificar suas classes concretas ✏️
Builder Separa a construção de um objeto complexo da sua representação, de modo que o mesmo processo de construção possa criar diferentes representações ✏️
Factory Method Define uma interface para criar um objeto, mas deixa as subclasses decidirem qual classe a ser instanciada ✏️
Prototype Especifica os tipos de objetos a serem criados usando uma instância prototípica e criar novos objetos copiando esse protótipo ✏️
Singleton Garante que uma classe tenha somente uma instância e fornece um ponto global de acesso para ela ✏️

Padrões Estruturais

Padrão Descrição Status
Adapter Converte a interface de uma classe em outra interface esperada pelos clientes ✏️
Bridge Separa uma abstração da sua implementação, de modo que as duas possam variar independentemente ✏️
Composite Compõe objetos em estrutura de árvore para representar hierarquias do tipo partes-todo ✏️
Decorator Atribui responsabilidades adicionais a um objeto dinamicamente ✏️
Facade Fornece uma interface unificada para um conjunto de interfaces em um subsistema ✏️
Flyweight Usa compartilhamento para suportar grandes quantidades de objetos, de granularidade fina, de maneira eficiente ✏️
Proxy Fornece um substituto ou espaço reservado para que outro objeto controle o seu acesso ✏️

Padrões Comportamentais

Padrão Descrição Status
Chain of Responsibility Evita o acoplamento do remetente de uma solicitação ao seu destinatário, dando a mais de um objeto a chance de tratar a solicitação ✏️
Command Encapsula uma solicitação como um objeto, permitindo, assim, parametrizar clientes com diferentes solicitações de fila ou log e suporte a operações que podem ser desfeitas ✏️
Interpreter Dada uma linguagem, define uma representação para sua gramática juntamente com um interpretador que usa a representação para interpretar sentenças nessa linguagem ✏️
Iterator Fornece uma maneira de acessar sequencialmente os elementos de uma agregação de objetos sem expor sua representação subjacente ✏️
Mediator Define um objeto que encapsula a forma como um conjunto de objetos interage ✏️
Memento Sem violar o encapsulamento, captura e externaliza um estado interno de um objeto, de modo que o mesmo possa posteriormente ser restaurado para este estado ✏️
Observer Define uma dependência um-para-muitos entre objetos, de modo que, quando um objeto muda de estado, todos os seus dependentes são automaticamente notificados e atualizados ✏️
State Permite que um objeto altere seu comportamento quando seu estado interno muda ✏️
Strategy Define uma família de algoritmos, encapsula cada um deles e os torna intercambiáveis ✏️
Template Method Define o esqueleto de um algoritmo em uma operação, postergando a definição de alguns passos para subclasses ✏️
Visitor Representa uma operação a ser executada sobre os elementos da estrutura de um objeto ✏️