Pular para o conteúdo

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.

Pedido modelo → copy(...)1copy(...) → Pedido A2copy(...) → Pedido BPedido modelo — configurado uma vezPedido modeloconfigurado uma vezcopy(...) — clonacopy(...)clonaPedido A — outro clientePedido Aoutro clientePedido B — outra dataPedido Boutra data

Arraste para o lado para ver o diagrama inteiro.

Cada cópia muda só o que precisa; o modelo continua intacto.

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

✗ AntesTypeScript
const modelo = { status: 'novo', itens: [] as string[], frete: 'padrão' };
const pedidoA = { ...modelo };
pedidoA.itens.push('caneca'); // altera também modelo.itens!
✓ DepoisTypeScript
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

Perguntar à IA

Monte um prompt pronto sobre Prototype na sua linguagem e no seu caso, e abra num chat gratuito.

ChatGPT Claude Perplexity

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.

Referências

Continue aprendendo

Todos os temas de boas práticas e padrões →