Middle
Wat is het Builder-ontwerppatroon?
sobes.tech AI
Antwoord van AI
Het ontwerp-patroon Builder is bedoeld om complexe objecten stapsgewijs te maken. Het scheidt het bouwproces van het object van zijn representatie, zodat hetzelfde bouwproces kan worden gebruikt om verschillende representaties te maken.
Belangrijkste componenten:
- Builder: Interface of abstracte klasse die methoden definieert voor het maken van onderdelen van het object.
- ConcreteBuilder: Implementatie van de Builder-interface, die onderdelen van het object bouwt en samenstelt.
- Director: Bepaalt de volgorde waarin de methoden van ConcreteBuilder worden aangeroepen om het object te maken. Optioneel.
- Product: Complex object dat wordt gemaakt met behulp van het Builder-patroon.
Voordelen:
- Maakt het mogelijk om complexe objecten stapsgewijs te maken.
- Biedt betere controle over het bouwproces.
- Maakt het mogelijk om de interne representatie van het object te wijzigen.
- Vereenvoudigt het maken van verschillende variaties van hetzelfde object.
Voorbeeld:
// Product
public class Car
{
public string Engine { get; set; }
public string Color { get; set; }
public int Wheels { get; set; }
public void Display()
{
Console.WriteLine($"Auto met motor: {Engine}, kleur: {Color}, wielen: {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 = "Rood";
}
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();
}
}
// Gebruik
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();
}
}