Boas práticas e padrões · Padrões de criação · 3 min de leitura
Prototype
Cria objetos copiando um existente em vez de montar do zero — útil quando montar é caro ou quando você quer variações de um modelo.
Arraste para o lado para ver o diagrama inteiro.
O padrão
Em vez de chamar um construtor com vinte parâmetros, você guarda um protótipo configurado e o clona. Em Kotlin, data class já traz copy(); em TypeScript, o espalhamento { ...obj } e structuredClone().
Cópia rasa e cópia profunda
copy() e { ...obj } copiam só o primeiro nível: listas e objetos dentro continuam compartilhados. Se a cópia vai alterar uma lista interna, copie a lista também (ou use estruturas imutáveis) — senão o "modelo" muda junto.
No código: antes e depois
const modelo = { status: 'novo', itens: [] as string[], frete: 'padrão' };
const pedidoA = { ...modelo };
pedidoA.itens.push('caneca'); // altera também modelo.itens! const modelo = { status: 'novo', itens: [] as string[], frete: 'padrão' } as const;
// Cópia que não compartilha a lista interna com o modelo
const novoPedido = (ajustes: Partial<Pedido>): Pedido => ({ ...structuredClone(modelo), ...ajustes });
const pedidoA = novoPedido({ itens: ['caneca'] });
const pedidoB = novoPedido({ frete: 'expresso' }); structuredClone copia em profundidade; o modelo nunca é alterado pelas cópias.
Em resumo
- Clona um modelo em vez de construir.
- data class copy() e { ...obj } já são o padrão.
- Cuidado: cópia rasa compartilha listas internas.
- Imutabilidade evita surpresas.
Perguntar à IA
Monte um prompt pronto sobre Prototype na sua linguagem e no seu caso, e abra num chat gratuito.
O prompt vai para o site que você escolher. Não cole senhas, tokens nem dados reais de clientes. Para Gemini e outros, copie e cole.