Padrões de Projeto GoF
Os padrões de projeto do GoF (Gang of Four) são divididos em três grandes categorias: Criacionais (como os objetos são criados), Estruturais (como classes e objetos se compõem) e Comportamentais (como os objetos interagem e distribuem responsabilidades).
1. Padrões Criacionais
Focam em abstrair o processo de criação de objetos, tornando o sistema independente de como seus objetos são criados, compostos e representados.
- Abstract Factory: Fornece uma interface para criar 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, permitindo que o mesmo processo de construção crie diferentes representações.
- Factory Method: Define uma interface para criar um objeto, mas deixa as subclasses decidirem qual classe instanciar.
- Prototype: Especifica os tipos de objetos a serem criados usando uma instância “protótipo” e cria novos objetos copiando este protótipo.
- Singleton: Garante que uma classe tenha apenas uma instância e fornece um ponto de acesso global a ela.
2. Padrões Estruturais
Lidam com a composição de classes e objetos para formar estruturas maiores e mais eficientes.
- Adapter: Converte a interface de uma classe em outra interface esperada pelos clientes, permitindo que classes incompatíveis trabalhem juntas.
- Bridge: Desacopla uma abstração de sua implementação, de modo que as duas possam variar independentemente.
- Composite: Agrupa objetos em estruturas de árvore para representar hierarquias partes-todo, permitindo tratar objetos individuais e composições de forma uniforme.
- Decorator: Dinamicamente adiciona responsabilidades adicionais a um objeto, servindo como uma alternativa flexível à herança.
- Facade: Fornece uma interface unificada e simplificada para um conjunto de interfaces em um subsistema complexo.
- Flyweight: Usa compartilhamento para suportar eficientemente grandes quantidades de objetos de formato fino (evitando consumo excessivo de memória).
- Proxy: Fornece um substituto ou marcador de lugar para outro objeto para controlar o acesso a ele.
3. Padrões Comportamentais
Concentram-se nos algoritmos e na atribuição de responsabilidades entre os objetos, além de como eles se comunicam.
- Chain of Responsibility: Evita o acoplamento do remetente de uma solicitação ao seu receptor, dando a mais de um objeto a chance de tratar a solicitação em cadeia.
- Command: Encapsula uma solicitação como um objeto, permitindo parametrizar clientes com diferentes solicitações, enfileirar ou registrar solicitações e suportar operações que podem ser desfeitas.
- Interpreter: Dada uma linguagem, define uma representação para sua gramática junto com um interpretador que usa a representação para interpretar sentenças na linguagem.
- Iterator: Fornece uma maneira de acessar sequencialmente os elementos de um objeto agregado sem expor sua representação subjacente.
- Mediator: Define um objeto que encapsula como um conjunto de objetos interage, promovendo o acoplamento fraco ao evitar que os objetos se refiram uns aos outros explicitamente.
- Memento: Sem violar o encapsulamento, captura e externaliza o estado interno de um objeto para que o objeto possa ser restaurado para este estado mais tarde.
- 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 notificados e atualizados automaticamente.
- State: Permite que um objeto altere seu comportamento quando seu estado interno muda, parecendo que o objeto mudou de classe.
- Strategy: Define uma família de algoritmos, encapsula cada um deles e os torna intercambiáveis, permitindo que o algoritmo varie independentemente dos clientes que o utilizam.
- Template Method: Define o esqueleto de um algoritmo em uma operação, adiando a implementação de alguns passos para as subclasses.
- Visitor: Desacopla o algoritmo dos objetos sobre os quais ele opera. Permite adicionar comportamentos novos a objetos existentes sem mexer no código desses objetos.