Builder usando C#
- #C#
O padrão de projeto Builder é um padrão de criação que permite construir objetos complexos passo a passo. Ele é útil quando a criação direta de um objeto é difícil ou impossível devido à sua complexidade ou a várias opções que podem ser configuradas para personalizar o objeto. O padrão de projeto Builder separa a construção de um objeto de sua representação e permite que diferentes representações do mesmo objeto sejam criadas usando o mesmo processo de construção.
Em C#, o padrão de projeto Builder é implementado criando uma interface ou classe abstrata "Builder" que define os métodos para construir as diferentes partes do objeto. Em seguida, é criada uma classe "Director" que coordena o processo de construção usando o objeto Builder. Por fim, uma classe "ConcreteBuilder" é criada para implementar o processo de construção em si.
Um exemplo de uso do padrão de projeto Builder em C# seria para construir um objeto "Carro" com várias opções de personalização, como a cor, o modelo do motor, o tipo de transmissão, etc. A seguir, está um exemplo de implementação do padrão de projeto Builder em C# para criar um objeto "Carro":
// Classe Carro
public class Carro
{
public string ModeloMotor { get; set; }
public string TipoTransmissao { get; set; }
public string Cor { get; set; }
// outras propriedades
public override string ToString()
{
return $"Modelo do Motor: {ModeloMotor}, Tipo de Transmissão: {TipoTransmissao}, Cor: {Cor}";
}
}
// Interface Builder
public interface ICarroBuilder
{
void DefinirModeloMotor(string modelo);
void DefinirTipoTransmissao(string tipo);
void DefinirCor(string cor);
Carro ObterCarro();
}
// Classe ConcreteBuilder
public class CarroBuilder : ICarroBuilder
{
private Carro carro = new Carro();
public void DefinirModeloMotor(string modelo)
{
carro.ModeloMotor = modelo;
}
public void DefinirTipoTransmissao(string tipo)
{
carro.TipoTransmissao = tipo;
}
public void DefinirCor(string cor)
{
carro.Cor = cor;
}
public Carro ObterCarro()
{
return carro;
}
}
// Classe Director
public class Concessionaria
{
private ICarroBuilder builder;
public Concessionaria(ICarroBuilder builder)
{
this.builder = builder;
}
public void ConstruirCarro()
{
builder.DefinirModeloMotor("Motor V6");
builder.DefinirTipoTransmissao("Automática");
builder.DefinirCor("Azul");
}
}
// Uso
static void Main(string[] args)
{
ICarroBuilder builder = new CarroBuilder();
Concessionaria concessionaria = new Concessionaria(builder);
concessionaria.ConstruirCarro();
Carro carro = builder.ObterCarro();
Console.WriteLine(carro.ToString());
// Output: Modelo do Motor: Motor V6, Tipo de Transmissão: Automática, Cor: Azul
}
Nesse exemplo, a classe CarroBuilder implementa a interface ICarroBuilder e define os métodos para definir as diferentes partes do objeto Carro. A classe Concessionaria atua como o diretor e coordena o processo de construção da classe Carro, chamando os métodos apropriados no objeto Builder para definir as partes do carro. Por fim, é chamado o método ObterCarro() no objeto Builder para obter o objeto Carro completo e personalizado.
O padrão de projeto Builder oferece a vantagem de permitir que diferentes representações do mesmo objeto sejam criadas usando o mesmo processo de construção, o que pode ser útil em casos em que a criação direta do objeto é difícil ou impossível. Ele também torna o processo de construção mais flexível e modular, permitindo que diferentes partes do objeto sejam construídas em diferentes etapas. Isso pode ser particularmente útil em aplicativos que precisam construir objetos complexos com muitas opções de personalização.