Middle
Pateikite pavyzdį, kaip įgyvendinti 'Statytojo' dizaino šabloną C# kalba.
sobes.tech AI
Atsakymas iš AI
Modelis "Statytojas" atskiria sudėtingo objekto konstravimo procesą nuo jo pateikimo taip, kad tas pats konstravimo procesas galėtų sukurti įvairius pateikimus. Naudojama, kai objekto kūrimas reikalauja daugybės žingsnių ir konfigūracijų.
// Abstraktus statytojas skelbia sąsają objektų dalių kūrimui.
public abstract class Builder
{
public abstract void BuildPartA();
public abstract void BuildPartB();
public abstract Product GetResult();
}
// Konkretus statytojas įgyvendina Builder sąsają
// ir kuria bei surenka produkto dalis.
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;
}
}
// Produktas atstovauja sudėtingą objektą, kuris turi būti sukurtas.
public class Product
{
private List<string> _parts = new List<string>();
public void Add(string part)
{
_parts.Add(part);
}
public void ListParts()
{
Console.WriteLine("Produkto dalys: " + string.Join(", ", _parts));
}
}
// Direktorius kuria objektą naudodamas Builder sąsają.
public class Director
{
public void Construct(Builder builder)
{
builder.BuildPartA();
builder.BuildPartB();
}
}
// Pavyzdys naudojimo
public class Program
{
public static void Main(string[] args)
{
Director director = new Director();
ConcreteBuilder builder = new ConcreteBuilder(); // Sukuriame konkretų statytoją
director.Construct(builder); // Direktorius vadovauja konstravimo procesui
Product result = builder.GetResult(); // Gauname paruoštą produktą
result.ListParts(); // Išvedame produkto dalis
}
}
Pagrindinės komponentės:
- Builder: Abstrakti sąsaja galutinių produktų dalių kūrimui.
- ConcreteBuilder: Konkretus Builder įgyvendinimas, kuris kuria ir surenka produkto dalis.
- Director: Klasė, kuri naudoja Builder, kad žingsnis po žingsnio sukonstruotų objektą, nežinodama jo konkretaus tipo.
- Product: Sudėtingas objektas, kuris yra kuriamas.
Šis pavyzdys rodo, kaip Director naudoja ConcreteBuilder, kad žingsnis po žingsnio sukurtų Product, atskirdamas konstravimo procesą nuo jo pateikimo.