Junior
Pateikite pavyzdį, kaip naudoti abstrakčiąją fabriką
sobes.tech AI
Atsakymas iš AI
Abstracti gamintojas — tai kūrimo šablonas, kuris pateikia sąsają, leidžiančią kurti susijusių objektų šeimas be jų konkrečių klasių nurodymo:
Pavyzdys C#:
// Produktų sąsajos
public interface IButton {
void Render();
}
public interface ICheckbox {
void Render();
}
// Konkrečios Windows produktai
public class WindowsButton : IButton {
public void Render() => Console.WriteLine("Windows mygtuko atvaizdas");
}
public class WindowsCheckbox : ICheckbox {
public void Render() => Console.WriteLine("Windows žymės langelio atvaizdas");
}
// Konkrečios MacOS produktai
public class MacButton : IButton {
public void Render() => Console.WriteLine("MacOS mygtuko atvaizdas");
}
public class MacCheckbox : ICheckbox {
public void Render() => Console.WriteLine("MacOS žymės langelio atvaizdas");
}
// Abstrakti gamintojas
public interface IGUIFactory {
IButton CreateButton();
ICheckbox CreateCheckbox();
}
// Konkrečios gamintojų klasės
public class WindowsFactory : IGUIFactory {
public IButton CreateButton() => new WindowsButton();
public ICheckbox CreateCheckbox() => new WindowsCheckbox();
}
public class MacFactory : IGUIFactory {
public IButton CreateButton() => new MacButton();
public ICheckbox CreateCheckbox() => new MacCheckbox();
}
// Naudojimas
class Application {
private IButton button;
private ICheckbox checkbox;
public Application(IGUIFactory factory) {
button = factory.CreateButton();
checkbox = factory.CreateCheckbox();
}
public void Render() {
button.Render();
checkbox.Render();
}
}
// Naudotojo kodas pasirenka reikiamą gamintoją
IGUIFactory factory = new WindowsFactory();
Application app = new Application(factory);
app.Render();
Šiuo pavyzdžiu abstrakti gamintojas leidžia kurti susijusių objektų šeimas (mygtukus ir žymės langelius) skirtingoms platformoms, nesikreipiant į konkrečių produktų klasių žinojimą.