Junior
Fornisci un esempio di utilizzo di una fabbrica astratta
sobes.tech AI
Risposta dell'AI
La fabbrica astratta è un pattern creazionale che fornisce un'interfaccia per creare famiglie di oggetti correlati senza specificare le loro classi concrete.
Esempio in C#:
// Interfacce dei prodotti
public interface IButton {
void Render();
}
public interface ICheckbox {
void Render();
}
// Prodotti concreti per Windows
public class WindowsButton : IButton {
public void Render() => Console.WriteLine("Rendering bottone Windows");
}
public class WindowsCheckbox : ICheckbox {
public void Render() => Console.WriteLine("Rendering checkbox Windows");
}
// Prodotti concreti per MacOS
public class MacButton : IButton {
public void Render() => Console.WriteLine("Rendering bottone MacOS");
}
public class MacCheckbox : ICheckbox {
public void Render() => Console.WriteLine("Rendering checkbox MacOS");
}
// Fattoria astratta
public interface IGUIFactory {
IButton CreateButton();
ICheckbox CreateCheckbox();
}
// Fattorie concrete
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();
}
// Uso
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();
}
}
// Nel codice client scegliamo la fabbrica necessaria
IGUIFactory factory = new WindowsFactory();
Application app = new Application(factory);
app.Render();
In questo esempio, la fabbrica astratta permette di creare famiglie di oggetti correlati (bottoni e checkbox) per diverse piattaforme, senza dipendere dalle classi concrete dei prodotti.