INFORMATIC TECHNOLOGY

Il pattern Abstract Factory

PROGETTAZIONE SOFTWARE


Il pattern Abstract Factory è un pattern creazionale basato su oggetti. Lo scopo principale è fornire un'interfaccia per una famiglia di oggetti correlati o dipendenti senza specificare le loro classi concrete. E' applicabile quando un sistema deve essere indipendente dalle modalità di creazione, composizione e rappresentazione dei suoi prodotti oppure deve deve poter essere configurato scegliendo tra più famiglie di prodotti.
Può essere applicato anche quando esistono famiglie di oggetti correlati, progettati per essere usati insieme oppure per creare una libreria di classi rivelando solo le interfacce e nascondendo le implementazioni.

Esempio:
Si pensi ad un sistema per la realizzazione di GUI in grado di supportare diversi look-and-feel che definiscono differenti aspetti e modalità di comportamento per i vari componenti (widget).
Si introduce un interfaccia WidgetFactory che definisce un metodo per la creazione di ciascun tipo base di widget che a sua volta è definito in una specifica interfaccia.
I client invocano i metodi su WidgetFactory per ottenere istanze dei widget senza conoscere le loro classi concrete.
Per fare ciò esiste una classe concreta di WidgetFactory per ogni look-and-feel considerato.

Struttura del pattern:

• AbstractFactory: definisce un'interfaccia per le operazioni di creazione di oggetti prodotto astratti.
• CocnreteFactory: implementa le operazioni degli oggetti prodotto concreti.
• AbstractProduct: dichiara un'interfaccia per un tipo di prodotti.
• ConcreteProduct: implementa l'interfaccia Product definendo un oggetto prodotto creato dalla corrispondente factory concreta.

Un’implementazione non è più legata in modo permanente a un’interfaccia. L’implementazione di un’astrazione può essere configurata durante l’esecuzione. Il disaccoppiamento tra ClasseAstratta ed Interfaccia elimina le dipendenza dall’implementazione a tempo di compilazione. Ciò aiuta ad ottenere una struttura stratificata del sistema.

Esempio codice Java:

AbstractFactory:

public interface LookAndFeel {
 Button createButton();
 Combo createTextInput();
}

ConcreteFactory1:
public class MotifLookAndFeel implements LookAndFeel {
 @Override public Button createButton() {
 return new MotifButton(); }
}

 @Override public TextInput createCombo() {
 return new MotifTextInput(); }

ConcreteFactory2:
public class WindowLookAndFeel implements LookAndFeel {
 @Override public Button createButton() {
 return new WindowButton(); }
}

 @Override public TextInput createCombo() {
 return new WindowTextInput(); }

public interface Button {
 Button create();
}

Interfaccia e implementazione del Button:
public class MotifButton implements Button {
 @Override public Button create() {
  System.out.println("Creazione MotifButton completata");
  return this; }
}

public class WindowButton implements Button {
 @Override public Button create() {
  System.out.println("Creazione WindowButton completata");
  return this; }
}

Client:
public class Client {
public static void main(String[] args) {
LookAndFeel lookAndFeel = null;
if (args[0].equals("window")) lookAndFeel = new WindowLookAndFeel();
else lookAndFeel = new MotifLookAndFeel();
Button button = lookAndFeel.createButton();
button.create();
TextInput input = lookAndFeel.createTextInput();
input.create(); }
}

Categorie Post


Sicurezza

Dalla crittografia all'anonimato, dallo scambio di messaggi agli antivirus. Vediamo come funziona la sicurezza digitale.

Internet

Tutto ciò che ci circonda è sempre più connesso ad internet, vediamo come e cosa c'è dietro la rete che ha cambiato il nostro mondo.

Programmazione

Raccolta di frammenti di codice, plugin, script, linee guida e tutto ciò che c'è da sapere sulla programmazione.

Progettazione Software

Come vengono progettati software complessi? Dietro c'è lavoro di team e tanta organizzazione. Cerchiamo di esaminarne i concetti principali.

Elettronica

Esaminia i componenti elettronici principali che ci permettono di utilizzare qualsiasi cosa di digitale, e non solo, al giorno d'oggi.

Mobile

Tutto ciò che riguarda il mondo dei cellulari e tablet con un occhio di riguardo al modding.