Middle
O que é o padrão de projeto Builder?
sobes.tech IA
Resposta da IA
O padrão de projeto Builder destina-se a criar objetos complexos passo a passo. Ele separa o processo de construção do objeto de sua representação, permitindo usar o mesmo processo de construção para criar diferentes representações.
Componentes principais:
- Builder: Interface ou classe abstrata que define os métodos para criar partes do objeto.
- ConcreteBuilder: Implementação da interface Builder, que constrói e monta as partes do objeto.
- Director: Define a ordem em que os métodos de ConcreteBuilder são chamados para criar o objeto. Componente opcional.
- Product: Objeto complexo criado usando o padrão Builder.
Vantagens:
- Permite criar objetos complexos passo a passo.
- Oferece melhor controlo sobre o processo de construção.
- Permite alterar a representação interna do objeto.
- Facilita a criação de diferentes variações do mesmo objeto.
Exemplo:
// Produto
public class Car
{
public string Engine { get; set; }
public string Color { get; set; }
public int Wheels { get; set; }
public void Display()
{
Console.WriteLine($"Carro com motor: {Engine}, Cor: {Color}, Rodas: {Wheels}");
}
}
// Builder
public interface ICarBuilder
{
void BuildEngine();
void BuildColor();
void BuildWheels();
Car GetResult();
}
// ConcreteBuilder
public class SportsCarBuilder : ICarBuilder
{
private Car _car = new Car();
public void BuildEngine()
{
_car.Engine = "V8";
}
public void BuildColor()
{
_car.Color = "Vermelho";
}
public void BuildWheels()
{
_car.Wheels = 4;
}
public Car GetResult()
{
return _car;
}
}
// Director
public class CarDirector
{
private ICarBuilder _builder;
public CarDirector(ICarBuilder builder)
{
_builder = builder;
}
public void Construct()
{
_builder.BuildEngine();
_builder.BuildColor();
_builder.BuildWheels();
}
}
// Uso
public class Program
{
public static void Main(string[] args)
{
ICarBuilder builder = new SportsCarBuilder();
CarDirector director = new CarDirector(builder);
director.Construct();
Car sportsCar = builder.GetResult();
sportsCar.Display();
}
}