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.