🚀 Capítulo 06: Singleton (Tema: Senhor dos Anéis)
NOTE
Este capítulo utiliza a temática de Senhor dos Anéis para explicar o padrão Singleton. Um Anel para a todos governar! No sistema, só pode existir uma única instância deste objeto.
1. 🎯 Objetivo da Aula
Compreender o padrão de projeto Singleton (Padrão de Criação), entendendo quando e por que utilizá-lo para garantir que uma classe tenha apenas uma única instância em todo o sistema.
2. 🏢 O Cenário Prático (Seu Desafio)
Sauron criou o Anel do Poder. A regra mágica do universo é clara: Existe apenas UM Um Anel.
- Se o Frodo tentar criar um novo Um Anel, o sistema deve dizer: “Não, use o que já existe”.
- Se o Gollum tentar criar outro, o sistema retorna o mesmo anel.
No mundo do desenvolvimento, existem objetos que precisam ser únicos.
- Exemplo: A conexão com o Banco de Dados. Você não quer abrir 1.000 conexões diferentes para o mesmo banco, você quer que todo o sistema use a mesma conexão. Seu desafio é entender como trancar a criação de objetos para garantir a existência de apenas um!
3. 🧠 Fundamentos: A Teoria Traduzida
O Singleton é um padrão de projeto criacional que garante que uma classe tenha apenas uma instância, enquanto fornece um ponto de acesso global para essa instância.
🔒 Como ele funciona?
- Construtor Privado: Ele proíbe que outros usem o comando
new Classe(). - Atributo Estático: Ele guarda a única instância criada dentro dele mesmo.
- Método de Acesso (getInstance): Uma função que verifica: “Eu já criei o objeto?“. Se sim, retorna o objeto existente. Se não, cria pela primeira e única vez.
4. 📖 Exemplo Guiado: O Um Anel em Código (JS)
class UmAnel {
constructor() {
if (UmAnel.instancia) {
return UmAnel.instancia; // Retorna a que já existe
}
this.poder = "Governar todos";
UmAnel.instancia = this; // Guarda a primeira instância
}
}
const anelDoFrodo = new UmAnel();
const anelDoGollum = new UmAnel();
console.log(anelDoFrodo === anelDoGollum); // true (São exatamente o mesmo objeto!)5. 🛠️ Prática Obrigatória 1: Cenários de Uso
Diga se as situações abaixo combinam com o uso do padrão Singleton ou não:
- O arquivo de configurações do sistema (onde fica guardado o tema escuro/claro e o idioma).
- Os produtos de um carrinho de compras de um e-commerce.
- O gerenciador de logs do sistema (que escreve os erros em um arquivo txt).
6. 🛠️ Prática Obrigatória 2: O Perigo Global
O Singleton funciona como uma variável global disfarçada. Se qualquer parte do código pode acessar e alterar o Singleton do “Um Anel”, o que acontece se um código malicioso mudar o poder do anel? Por que devemos usar o Singleton com cuidado?
7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)
- Faça o Commit: No GitHub Desktop, digite a mensagem (ex:
Finaliza Capítulo 06 Paradigmas) e clique em Commit to main. - Envie para a Nuvem (Push): Clique em Push origin.
8. 📂 Estrutura de Pastas
mod_10_paradigmas_e_padroes_de_projeto/
├── capitulos/
│ ├── capitulo_06_singleton.md
│ └── codigos/
│ └── cap06/
│ └── um_anel.js9. 💡 Checkpoint de Lógica
Se o padrão Singleton impede o uso livre do new, como o próprio desenvolvedor cria a primeira instância? (Dica: O método getInstance faz isso internamente).
10. 🔥 Desafio de Fixação
Pesquise como implementar o padrão Singleton em linguagens fortemente tipadas como Java ou C#, onde o construtor precisa ser explicitamente declarado como private.
🔑 Gabarito de Código/Fórmulas
Gabarito da Prática 1:
- Sim (Você quer que todo o sistema leia as mesmas configurações).
- Não (Cada usuário tem seu próprio carrinho, não pode ser uma instância única para todos).
- Sim (Um único gerenciador centralizando a gravação dos logs).