Middle
Mi az a Builder tervezési minta?
sobes.tech MI
Válasz az MI-től
A Builder tervezési minta arra szolgál, hogy összetett objektumokat lépésről lépésre hozzunk létre. Elkülöníti az objektum építési folyamatát a reprezentációjától, lehetővé téve ugyanazon építési folyamat használatát különböző reprezentációk létrehozására.
Fő összetevők:
- Builder: Felület vagy absztrakt osztály, amely meghatározza az objektum részeinek létrehozására szolgáló módszereket.
- ConcreteBuilder: A Builder felületének megvalósítása, amely az objektum részeit építi és összerakja.
- Director: Meghatározza azokat a sorrendeket, amelyekben a ConcreteBuilder módszerei hívódnak az objektum létrehozásához. Opcionális komponens.
- Product: Összetett objektum, amelyet a Builder mintát használva hoznak létre.
Előnyök:
- Lehetővé teszi összetett objektumok lépésenkénti létrehozását.
- Jobb kontrollt biztosít az építési folyamat felett.
- Lehetővé teszi az objektum belső reprezentációjának módosítását.
- Egyszerűsíti ugyanazon objektum különböző variációinak létrehozását.
Példa:
// Termék
public class Car
{
public string Engine { get; set; }
public string Color { get; set; }
public int Wheels { get; set; }
public void Display()
{
Console.WriteLine($"Autó motorral: {Engine}, szín: {Color}, kerekek: {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 = "Piros";
}
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();
}
}
// Használat
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();
}
}