Sobes.tech
Middle

Uveďte príklad implementácie návrhového vzoru 'Staviteľ' v C#.

sobes.tech AI

Odpoveď od AI

Vzorec "Staviteľ" rozdeľuje proces konštrukcie zloženého objektu od jeho zobrazenia tak, aby rovnaký proces konštrukcie mohol vytvárať rôzne zobrazenia. Používa sa, keď tvorba objektu vyžaduje veľa krokov a konfigurácií.

// Abstraktný staviteľ vyhlasuje rozhranie pre tvorbu častí objektu.
public abstract class Builder
{
    public abstract void BuildPartA();
    public abstract void BuildPartB();
    public abstract Product GetResult();
}

// Konkrétny staviteľ implementuje rozhranie Builder
// a konštruuje a skladá časti 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 predstavuje zložitý objekt, ktorý má byť postavený.
public class Product
{
    private List<string> _parts = new List<string>();

    public void Add(string part)
    {
        _parts.Add(part);
    }

    public void ListParts()
    {
        Console.WriteLine("Časti produktu: " + string.Join(", ", _parts));
    }
}

// Riaditeľ konštruuje objekt pomocou rozhrania Builder.
public class Director
{
    public void Construct(Builder builder)
    {
        builder.BuildPartA();
        builder.BuildPartB();
    }
}

// Príklad použitia
public class Program
{
    public static void Main(string[] args)
    {
        Director director = new Director();
        ConcreteBuilder builder = new ConcreteBuilder(); // Vytvárame konkrétneho staviteľa

        director.Construct(builder); // Riaditeľ riadi proces stavby

        Product result = builder.GetResult(); // Získavame hotový produkt
        result.ListParts(); // Vypisujeme časti produktu
    }
}

Hlavné komponenty:

  • Builder: Abstraktné rozhranie pre tvorbu častí konečného produktu.
  • ConcreteBuilder: Konkrétna implementácia Builder, ktorá stavia a skladá časti produktu.
  • Director: Trieda, ktorá používa Builder na krok za krokom konštrukciu objektu, nepoznajúc jeho konkrétny typ.
  • Product: Zložitý objekt, ktorý sa stavia.

Tento príklad ukazuje, ako Director používa ConcreteBuilder na vytvorenie Product krok za krokom, oddelením procesu konštrukcie od jeho zobrazenia.