Middle
Podaj przykład implementacji wzorca projektowego 'Budowniczy' w C#.
sobes.tech AI
Odpowiedź od AI
Wzorzec "Budowniczy" oddziela proces konstruowania złożonego obiektu od jego reprezentacji, tak aby ten sam proces konstruowania mógł tworzyć różne reprezentacje. Stosuje się go, gdy tworzenie obiektu wymaga wielu kroków i konfiguracji.
// Abstrakcyjny budowniczy deklaruje interfejs do tworzenia części obiektu.
public abstract class Builder
{
public abstract void BuildPartA();
public abstract void BuildPartB();
public abstract Product GetResult();
}
// Konkretne budowniczy implementuje interfejs Builder
// i konstruuje oraz składa części produktu.
public class ConcreteBuilder : Builder
{
private Product _product = new Product();
public override void BuildPartA()
{
_product.Add("PartA");
}
public override void BuildPartB()
{
_product.Add("PartB");
}
public override Product GetResult()
{
return _product;
}
}
// Produkt reprezentuje złożony obiekt, który ma zostać zbudowany.
public class Product
{
private List<string> _parts = new List<string>();
public void Add(string part)
{
_parts.Add(part);
}
public void ListParts()
{
Console.WriteLine("Części produktu: " + string.Join(", ", _parts));
}
}
// Dyrektor konstruuje obiekt za pomocą interfejsu Builder.
public class Director
{
public void Construct(Builder builder)
{
builder.BuildPartA();
builder.BuildPartB();
}
}
// Przykład użycia
public class Program
{
public static void Main(string[] args)
{
Director director = new Director();
ConcreteBuilder builder = new ConcreteBuilder(); // Tworzymy konkretny budowniczy
director.Construct(builder); // Dyrektor kieruje procesem budowy
Product result = builder.GetResult(); // Otrzymujemy gotowy produkt
result.ListParts(); // Wyświetlamy części produktu
}
}
Główne komponenty:
- Builder: Abstrytny interfejs do tworzenia części końcowego produktu.
- ConcreteBuilder: Konkretna implementacja Builder, która buduje i składa części produktu.
- Director: Klasa, która używa Builder do krokowego konstruowania obiektu, nie znając jego konkretnego typu.
- Product: Złożony obiekt, który jest konstruowany.
Ten przykład demonstruje, jak Director używa ConcreteBuilder do tworzenia Product krok po kroku, oddzielając proces konstruowania od jego reprezentacji.