0Pricing
Java Academy · Lezione

Abstract Factory per famiglie di prodotti

Crei famiglie di oggetti correlati, ad esempio componenti UI per piattaforma, con Abstract Factory.

Abstract Factory per famiglie di prodotti è una lezione Java Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Java Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Java Academy include 4 lezioni in totale.

Intento di Abstract Factory

Abstract Factory fornisce un'interfaccia per creare famiglie di oggetti correlati senza specificarne le classi concrete. Garantisce che i prodotti di una stessa factory siano compatibili.

Il problema: famiglie di prodotti incoerenti

Senza Abstract Factory, potrebbe combinare un pulsante Windows con una casella di controllo Mac. Il pattern impone che tutti i prodotti provengano dalla stessa factory, garantendo coerenza visiva o comportamentale.

Interfaccia di Abstract Factory

Definisca un'interfaccia con un metodo di creazione per ogni prodotto della famiglia. Ogni factory concreta implementa tutti i metodi per una determinata variante.

public interface UIFactory {
    Button   createButton();
    Checkbox createCheckbox();
    TextField createTextField();
}

Factory concrete

Ogni factory concreta crea tutti i prodotti per una piattaforma o un tema. Il codice client fa riferimento solo all'interfaccia, non alle factory concrete.

public class WindowsUIFactory implements UIFactory {
    public Button    createButton()    { return new WindowsButton(); }
    public Checkbox  createCheckbox()  { return new WindowsCheckbox(); }
    public TextField createTextField() { return new WindowsTextField(); }
}
public class MacUIFactory implements UIFactory {
    public Button    createButton()    { return new MacButton(); }
    public Checkbox  createCheckbox()  { return new MacCheckbox(); }
    public TextField createTextField() { return new MacTextField(); }
}

Interfacce astratte dei prodotti

Ogni tipo di prodotto ha una propria interfaccia. I prodotti concreti la implementano per ogni piattaforma. Il client programma rispetto al prodotto astratto, non a quello concreto.

public interface Button   { void render(); void onClick(); }
public interface Checkbox  { void render(); boolean isChecked(); }
public interface TextField { void render(); String getValue(); }

Il client che utilizza la factory

Il client riceve una factory tramite il proprio costruttore. Chiama i metodi della factory per creare i widget e li utilizza tramite interfacce astratte dei prodotti, rimanendo completamente disaccoppiato dalle classi concrete.

public class Application {
    private final UIFactory factory;
    public Application(UIFactory factory) { this.factory = factory; }
    public void buildUI() {
        Button btn = factory.createButton();
        Checkbox cb = factory.createCheckbox();
        btn.render();
        cb.render();
    }
}

Scegliere la factory a runtime

Selezioni la factory concreta in base all'ambiente o alla configurazione e la inietti. Il resto dell'applicazione non fa mai riferimento alle classi specifiche della piattaforma.

String os = System.getProperty("os.name").toLowerCase();
UIFactory factory = os.contains("mac") ? new MacUIFactory() : new WindowsUIFactory();
new Application(factory).buildUI();

Aggiungere un nuovo prodotto alla famiglia

L'aggiunta di un nuovo prodotto, ad esempio Slider, richiede l'aggiornamento dell'interfaccia della factory astratta e di tutte le factory concrete: questo è uno svantaggio del pattern.

public interface UIFactory {
    Button   createButton();
    Checkbox createCheckbox();
    Slider   createSlider(); // new product — must update ALL factories
}

Abstract Factory e Factory Method

Factory Method crea un prodotto tramite l'ereditarietà. Abstract Factory crea una suite di prodotti tramite la composizione. Abstract Factory viene generalmente implementato utilizzando un insieme di Factory Method.

Abstract Factory per i driver di database

Una factory astratta ConnectionFactory può produrre oggetti Connection, Statement e ResultSet. Per passare da MySQL a PostgreSQL è sufficiente cambiare la factory.

public interface DBFactory {
    Connection  createConnection();
    Statement   createStatement();
}
public class MySQLFactory implements DBFactory { ... }
public class PgFactory   implements DBFactory { ... }

Abstract Factory con i profili Spring

In Spring Boot, definisca un bean UIFactory diverso per ogni profilo: l'applicazione inietta sempre UIFactory; Spring risolve la factory concreta corretta per il profilo attivo.

@Configuration
@Profile("mac")
public class MacConfig {
    @Bean UIFactory uiFactory() { return new MacUIFactory(); }
}

Garantire la coerenza

Il vantaggio fondamentale è che una factory produce solo prodotti compatibili. Utilizzando correttamente Abstract Factory, non è possibile ottenere accidentalmente una casella di controllo Mac abbinata a un pulsante Windows.

Verifica rapida

Che cosa garantisce Abstract Factory che Factory Method non garantisce?

Riepilogo

Abstract Factory crea famiglie di oggetti correlati tramite un'interfaccia comune. È possibile sostituire intere famiglie di prodotti cambiando la factory. È ideale quando i prodotti devono essere coerenti, ma aggiunge complessità quando si introducono nuovi tipi di prodotto.

Domande Frequenti

La lezione «Abstract Factory per famiglie di prodotti» è gratuita?

Sì — il testo completo di «Abstract Factory per famiglie di prodotti» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Java Academy, passa a CoddyKit PRO. Il corso Java Academy include 4 lezioni in totale.

Cosa imparerò in «Abstract Factory per famiglie di prodotti»?

Crei famiglie di oggetti correlati, ad esempio componenti UI per piattaforma, con Abstract Factory. Eserciti Java Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Java Academy?

Non è richiesta alcuna esperienza precedente. Java Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «Abstract Factory per famiglie di prodotti»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Java Academy?

Sì. Ogni lezione Java Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Singleton: implementazioni thread-safe
  2. Pattern Factory Method
  3. Abstract Factory per famiglie di prodotti
  4. Pattern Builder con API fluent
← Torna a Java Academy