O padrão Prototype é usado quando você precisa criar novos objetos a partir de uma instância existente, em vez de instanciá-los diretamente. Ele permite copiar (clonar) objetos, o que é útil quando a criação de um novo objeto do zero é complexa ou custosa. Esse padrão é frequentemente usado em situações onde você precisa criar várias instâncias de objetos similares com pequenas variações, como a criação de documentos ou gráficos em um editor, mantendo algumas propriedades comuns.
Exemplo de Código em C#:
// Interface Prototype
public interface IPrototype<T>
{
T Clonar();
}
// Classe concreta que implementa Prototype
public class Circulo : IPrototype<Circulo>
{
public int Raio { get; set; }
public Circulo(int raio)
{
Raio = raio;
}
public Circulo Clonar()
{
// Clona o objeto atual
return new Circulo(this.Raio);
}
public void ExibirDetalhes()
{
Console.WriteLine($"Círculo com raio: {Raio}");
}
}
class Program
{
static void Main(string[] args)
{
// Criar um círculo original
Circulo circulo1 = new Circulo(10);
circulo1.ExibirDetalhes(); // Saída: Círculo com raio: 10
// Clonar o círculo
Circulo circulo2 = circulo1.Clonar();
circulo2.ExibirDetalhes(); // Saída: Círculo com raio: 10
// Modificar o clone
circulo2.Raio = 20;
circulo2.ExibirDetalhes(); // Saída: Círculo com raio: 20
circulo1.ExibirDetalhes(); // Saída: Círculo com raio: 10
}
}
Explicação do Código:
Neste exemplo, a classe Circulo implementa a interface IPrototype, que define o método Clonar. O método Clonar cria uma nova instância de Circulo com as mesmas propriedades do objeto original. O código principal demonstra a criação de um círculo, sua clonagem, e como as mudanças no objeto clonado não afetam o original.
Conclusão:
O padrão Prototype é ideal para criar cópias de objetos de forma eficiente, especialmente quando a criação de novos objetos do zero é complexa ou requer muitos recursos. Ele é útil quando você precisa criar vários objetos similares, permitindo copiar uma instância existente e modificá-la conforme necessário.
Código fonte: GitHub
Top comments (0)