Middle
Cos'è il pattern di progettazione Builder?
sobes.tech AI
Risposta dell'AI
Il pattern di progettazione Builder è destinato a creare oggetti complessi passo dopo passo. Separa il processo di costruzione dell'oggetto dalla sua rappresentazione, consentendo di utilizzare lo stesso processo di costruzione per creare diverse rappresentazioni.
Componenti principali:
- Builder: Interfaccia o classe astratta che definisce i metodi per creare parti dell'oggetto.
- ConcreteBuilder: Implementazione dell'interfaccia Builder, che costruisce e assembla le parti dell'oggetto.
- Director: Definisce l'ordine in cui vengono chiamati i metodi di ConcreteBuilder per creare l'oggetto. Componente opzionale.
- Product: Oggetto complesso creato utilizzando il pattern Builder.
Vantaggi:
- Permette di creare oggetti complessi passo dopo passo.
- Offre un miglior controllo sul processo di costruzione.
- Permette di cambiare la rappresentazione interna dell'oggetto.
- Facilita la creazione di diverse variazioni dello stesso oggetto.
Esempio:
// Prodotto
public class Car
{
public string Engine { get; set; }
public string Color { get; set; }
public int Wheels { get; set; }
public void Display()
{
Console.WriteLine($"Auto con motore: {Engine}, Colore: {Color}, Ruote: {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 = "Rosso";
}
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();
}
}
// Utilizzo
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();
}
}