Design pattern in Python

Abstract Factory Pattern in Python

Create whole families of matching objects, such as a dark-theme button and checkbox, without naming their classes.

  • Avanzato
  • 3 min di lettura
  • 1 esempio eseguibile
Cosa imparerai
  • Product families
  • One factory per family
  • Swapping the whole family at once
Theme factories
  • theme factory
    • DarkThemeFactory
      • DarkButton
      • DarkCheckbox
    • LightThemeFactory
      • LightButton
      • LightCheckbox

One factory, one matching family

Abstract Factory è un design pattern per creare un'intera famiglia (family) di oggetti correlati, senza indicare la classe concreta di ciascuno. Per esempio, un'interfaccia in modalità scura ha bisogno di pulsanti e caselle di controllo nello stesso stile scuro, senza mescolarli con lo stile chiaro.

Punti chiave

  1. A factory has one method per product: create_button(), create_checkbox().
  2. DarkThemeFactory returns dark widgets; LightThemeFactory returns light ones.
  3. The client receives a factory and never mixes themes by accident.

Quando si usa?

  • Risolvere problemi ricorrenti di progettazione a oggetti con strutture collaudate.
  • Disaccoppiare le responsabilità per rendere il codice più facile da estendere e testare.
  • Usare un vocabolario di progettazione condiviso nelle discussioni di architettura con il team.

Codice di esempio

Esegui codice →
main.py
class DarkButton:
    # Abstract Factory: create products that belong to one family.
    def render(self): return "Dark button"


class DarkCheckbox:
    def render(self): return "Dark checkbox"


class DarkThemeFactory:
    # Produce a compatible family of UI objects.
    def create_button(self): return DarkButton()
    def create_checkbox(self): return DarkCheckbox()


factory = DarkThemeFactory()
print(factory.create_button().render())
print(factory.create_checkbox().render())
Crea un pulsante Run per questo esempio

Risultato dell'esecuzione

Dark button
Dark checkbox

Spiegazione del codice

Ogni factory crea un insieme di pulsante e casella di controllo nello stesso stile: per esempio, la factory della modalità scura crea DarkButton e DarkCheckbox. Il codice che li usa lavora solo con la factory, quindi non mescola mai per sbaglio componenti di stili diversi.

Modifica i valori ed esegui il programma nel compilatore Python online CodeUtility senza installare Python.

Esercizi di approfondimento

Prova a modificare il codice seguendo i suggerimenti qui sotto. Cambiare il codice e osservare il risultato ti aiuta a capire molto più che leggerlo soltanto.

  1. Sostituisci il dominio di esempio mantenendo la struttura del pattern.
  2. Confronta il pattern con un’implementazione più semplice e spiegane i compromessi.
  3. Scrivi test per ogni partecipante prima di aggiungere un’altra implementazione.
Esegui nel compilatore Python →