Middle
Ce este pattern-ul de proiectare Builder?
sobes.tech AI
Răspuns de la AI
Modelul de proiectare Builder este destinat să creeze obiecte complexe pas cu pas. El separă procesul de construcție a obiectului de reprezentarea sa, permițând utilizarea aceluiași proces de construcție pentru a crea diferite reprezentări.
Componente principale:
- Builder: Interfață sau clasă abstractă care definește metodele pentru crearea părților obiectului.
- ConcreteBuilder: Implementarea interfeței Builder, care construiește și asamblează părțile obiectului.
- Director: Definește ordinea în care sunt apelate metodele ConcreteBuilder pentru a crea obiectul. Componentă opțională.
- Product: Obiect complex creat folosind pattern-ul Builder.
Avantaje:
- Permite crearea pas cu pas a obiectelor complexe.
- Oferă un control mai bun asupra procesului de construcție.
- Permite schimbarea reprezentării interne a obiectului.
- Facilitează crearea diferitelor variații ale aceluiași obiect.
Exemplu:
// Produs
public class Car
{
public string Engine { get; set; }
public string Color { get; set; }
public int Wheels { get; set; }
public void Display()
{
Console.WriteLine($"Mașină cu motor: {Engine}, Culoare: {Color}, Roți: {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 = "Roșu";
}
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();
}
}
// Utilizare
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();
}
}