Sobes.tech
Middle

Forneça um exemplo de implementação do padrão de projeto 'Construtor' em C#.

sobes.tech IA

Resposta da IA

O padrão "Construtor" separa o processo de construção de um objeto complexo de sua representação, de modo que o mesmo processo de construção possa criar diferentes representações. Aplica-se quando a criação do objeto requer múltiplos passos e configurações.

// O construtor abstrato declara a interface para criar partes do objeto.
public abstract class Builder
{
    public abstract void BuildPartA();
    public abstract void BuildPartB();
    public abstract Product GetResult();
}

// O construtor concreto implementa a interface Builder
// e constrói e monta as partes do produto.
public class ConcreteBuilder : Builder
{
    private Product _product = new Product();

    public override void BuildPartA()
    {
        _product.Add("PartA");
    }

    public override void BuildPartB()
    {
        _product.Add("PartB");
    }

    public override Product GetResult()
    {
        return _product;
    }
}

// O produto representa um objeto complexo que deve ser construído.
public class Product
{
    private List<string> _parts = new List<string>();

    public void Add(string part)
    {
        _parts.Add(part);
    }

    public void ListParts()
    {
        Console.WriteLine("Partes do produto: " + string.Join(", ", _parts));
    }
}

// O diretor constrói o objeto usando a interface Builder.
public class Director
{
    public void Construct(Builder builder)
    {
        builder.BuildPartA();
        builder.BuildPartB();
    }
}

// Exemplo de uso
public class Program
{
    public static void Main(string[] args)
    {
        Director director = new Director();
        ConcreteBuilder builder = new ConcreteBuilder(); // Criando um construtor concreto

        director.Construct(builder); // O diretor orienta o processo de construção

        Product result = builder.GetResult(); // Obtém o produto final
        result.ListParts(); // Exibe as partes do produto
    }
}

Componentes principais:

  • Builder: Interface abstrata para criar partes do produto final.
  • ConcreteBuilder: Implementação concreta de Builder, que constrói e monta as partes do produto.
  • Director: Classe que usa Builder para construir passo a passo o objeto, sem conhecer seu tipo concreto.
  • Product: Objeto complexo que está sendo construído.

Este exemplo demonstra como Director usa ConcreteBuilder para criar Product passo a passo, separando o processo de construção de sua representação.