O problema: reconstruir o mesmo estado
Um editor pode ter modelos de documento com dezenas de opções. Construir cada novo documento do zero repete configuração e pode esquecer valores padrão. Prototype usa um objeto existente como modelo e cria uma instância separada com estado inicial equivalente.
Exemplo em C#
public sealed record Tema(string CorFundo, string CorTexto);
public sealed record Relatorio(string Titulo, Tema Tema)
{
public Relatorio CopiarComTitulo(string titulo) =>
this with { Titulo = titulo, Tema = Tema with { } };
}
var baseRelatorio = new Relatorio("Modelo", new("#101714", "#edf2eb"));
var novo = baseRelatorio.CopiarComTitulo("Vendas do mês");Records imutáveis tornam a cópia explícita. Em objetos mutáveis, implemente uma operação de cópia que esclareça quais referências são compartilhadas. Uma cópia rasa de uma lista pode deixar duas instâncias alterando o mesmo conteúdo sem intenção.
Quando usar e cuidados
É útil quando criar um objeto é caro ou complexo e há configurações-base reutilizadas. Evite clonagem genérica que dependa de reflexão e esconda a semântica. Defina se cópia é rasa ou profunda, como tratar identificadores e quais componentes podem ser compartilhados.
Relacionado
Builder monta uma configuração passo a passo; Prototype parte de uma instância pronta. Factory Method escolhe como criar o produto. Veja o catálogo GoF.