Middle
Uveďte příklad implementace návrhového vzoru 'Stavitel' v C#.
sobes.tech AI
Odpověď od AI
Vzor "Stavitel" odděluje proces konstrukce složitého objektu od jeho reprezentace tak, aby stejný konstrukční proces mohl vytvářet různé reprezentace. Používá se, když tvorba objektu vyžaduje mnoho kroků a konfigurací.
// Abstraktní stavitel deklaruje rozhraní pro vytváření částí objektu.
public abstract class Builder
{
public abstract void BuildPartA();
public abstract void BuildPartB();
public abstract Product GetResult();
}
// Konkrétní stavitel implementuje rozhraní Builder
// a sestavuje části 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 představuje složitý objekt, který má být postaven.
public class Product
{
private List<string> _parts = new List<string>();
public void Add(string part)
{
_parts.Add(part);
}
public void ListParts()
{
Console.WriteLine("Části produktu: " + string.Join(", ", _parts));
}
}
// Ředitel sestavuje objekt pomocí rozhraní Builder.
public class Director
{
public void Construct(Builder builder)
{
builder.BuildPartA();
builder.BuildPartB();
}
}
// Příklad použití
public class Program
{
public static void Main(string[] args)
{
Director director = new Director();
ConcreteBuilder builder = new ConcreteBuilder(); // Vytvoření konkrétního stavitele
director.Construct(builder); // Ředitel řídí proces stavby
Product result = builder.GetResult(); // Získání hotového produktu
result.ListParts(); // Výpis částí produktu
}
}
Hlavní komponenty:
- Builder: Abstraktní rozhraní pro tvorbu částí konečného produktu.
- ConcreteBuilder: Konkrétní implementace Builder, která staví a skládá části produktu.
- Director: Třída, která používá Builder k postupnému sestavení objektu, aniž by znala jeho konkrétní typ.
- Product: Složitý objekt, který je sestavován.
Tento příklad ukazuje, jak Director používá ConcreteBuilder k postupnému vytváření Product, přičemž proces konstrukce je oddělen od jeho reprezentace.