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:
- Sistema de logs
- Sempre jogando os logs no mesmo objeto
- 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
- 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