Este repositório contém exemplos práticos de padrões de design implementados em Go. Cada padrão demonstra soluções para problemas comuns de desenvolvimento de software, com exemplos reais e aplicáveis.
- Go 1.24.2 ou superior
- Make (opcional, mas recomendado)
O projeto inclui um Makefile para facilitar a execução dos exemplos:
# Ver todos os comandos disponíveis
make help
# Executar um exemplo específico
make builder
make singleton
make strategy
# Executar todos os exemplos
make all
# Listar padrões disponíveis
make list
# Limpar arquivos compilados
make cleanSe preferir não usar o Makefile, você pode executar os exemplos diretamente:
# Builder Pattern
cd creational/builder/example
go run main.go
# Singleton Pattern
cd creational/singleton
go run database_manager.go example.go
# Strategy Pattern
cd behavioural/strategy
go run main.goLocalização: creational/builder/
📖 Documentação Detalhada
Descrição: O Builder é um padrão criacional que permite construir objetos complexos passo a passo. Este exemplo demonstra a construção de computadores com diferentes configurações.
Problema Resolvido:
- Construção de objetos complexos com muitos parâmetros
- Flexibilidade para criar diferentes variações do mesmo objeto
- Eliminação de construtores com muitos parâmetros
Cenário Real: Loja de computadores que precisa montar diferentes tipos de máquinas (Gaming, Escritório, Desenvolvimento, Econômico).
Principais Benefícios:
- ✅ Flexibilidade total na construção
- ✅ Reutilização de código
- ✅ Controle passo a passo
- ✅ Código mais legível
Como Executar:
make builderLocalização: creational/singleton/
📖 Documentação Detalhada
Descrição: O Singleton é um padrão criacional que garante que uma classe tenha apenas uma instância e fornece um ponto de acesso global a ela. Este exemplo implementa um gerenciador de conexão com banco de dados.
Problema Resolvido:
- Múltiplas conexões desnecessárias ao banco de dados
- Consumo excessivo de recursos (memória, conexões TCP)
- Dificuldade de gerenciamento do estado da conexão
- Possíveis problemas de performance e escalabilidade
Cenário Real: Sistema com múltiplos serviços (UserService, OrderService, PaymentService) que precisam compartilhar uma única conexão com banco de dados.
Principais Benefícios:
- ✅ Garantia de uma única instância
- ✅ Thread safety com sync.Once
- ✅ Controle centralizado de recursos
- ✅ Economia de memória e recursos
Como Executar:
make singletonLocalização: behavioural/strategy/
📖 Documentação Detalhada
Descrição: O Strategy é um padrão comportamental que permite definir uma família de algoritmos, encapsulá-los e torná-los intercambiáveis. Este exemplo implementa um serviço de notificações com diferentes canais.
Problema Resolvido:
- Eliminação de múltiplos
if/elsestatements - Extensibilidade para novos tipos de notificação
- Manutenibilidade do código
Cenário Real: Sistema de notificações que precisa enviar mensagens através de diferentes canais (Discord, Email, Instagram, Twitter, WhatsApp).
Principais Benefícios:
- ✅ Eliminação de condicionais complexos
- ✅ Fácil adição de novos canais
- ✅ Código mais limpo e testável
- ✅ Segue o princípio Open/Closed
Como Executar:
make strategydesign-patterns/
├── creational/ # Padrões criacionais
│ ├── builder/ # Padrão Builder
│ │ ├── builder.go # Implementação do padrão
│ │ ├── example/ # Exemplo prático
│ │ └── README.md # 📖 [Documentação](creational/builder/README.md)
│ └── singleton/ # Padrão Singleton
│ ├── database_manager.go # Implementação do padrão
│ ├── example.go # Demonstrações de uso
│ └── README.md # 📖 [Documentação](creational/singleton/README.md)
├── behavioural/ # Padrões comportamentais
│ └── strategy/ # Padrão Strategy
│ ├── main.go # Exemplo de uso
│ ├── service/ # Implementação do serviço
│ └── README.md # 📖 [Documentação](behavioural/strategy/README.md)
├── structural/ # Padrões estruturais (futuro)
├── Makefile # Comandos para execução
├── go.mod # Dependências do Go
└── README.md # Este arquivo
- Aprendizado: Demonstrar padrões de design de forma prática
- Referência: Servir como guia para implementações em Go
- Exemplos Reais: Usar cenários do mundo real
- Documentação: Explicar quando e como usar cada padrão
Para adicionar um novo padrão de design:
- Crie uma nova pasta na categoria apropriada
- Implemente o padrão com exemplos práticos
- Adicione documentação detalhada
- Atualize o Makefile com o novo comando
- Atualize este README
padrao-nome/
├── main.go # Exemplo de uso
├── implementation/ # Implementação do padrão
├── example/ # Exemplos práticos
└── README.md # Documentação
Contribuições são bem-vindas! Sinta-se à vontade para:
- Adicionar novos padrões de design
- Melhorar a documentação
- Corrigir bugs
- Sugerir melhorias
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
Nota: Este projeto está em desenvolvimento ativo. Novos padrões serão adicionados conforme necessário.