Il pattern factory  ci permette di avere l’istanza giusta tra un insieme di classi provenienti dalla stessa classe padre a partire da una condizione di selezione. 

 

Più in dettaglio possiamo dire che date una serie di classi F1, F2, ….Fn  derivanti dalla stessa classe o interfaccia P, il pattern factory prevede una ulteriore classe con un eventuale metodo statico che in base ad un parametro di ingresso istanzia una delle n classi figlie. La classe istanziata sarà dunque scelta a runtime sfruttando il polimorfismo.

 

Vediamo un esempio pratico:

supponiamo di avere una classe FiatPunto:

 

public class FiatPunto{

    public abstract void stampaAccessori(){}

    ………..

    // altri metodi

}

 

 

Da questa classe deriviamone altre tre: FiatPuntoAllestimentoBase, FiatPuntoAllestimentoMedio e FiatPuntoAllestimentoTop

 

public class FiatPuntoAllestimentoBase extends FiatPunto {

    public  void stampaAccessori(){

        System.out.println(“Sterzo, ruote, sedili”);

    }

    ………..

    // altri metodi

}

 

Creiamo ora la classe che fa da factory

 

public class FactoryFiat{

 

    public static FiatPunto get(int prezzo){

        if(prezzo < 10.000)

            return new FiatPuntoAllestimentoBase();

        else if(prezzo >= 10.000 && < 12.0000)

            return new FiatPuntoAllestimentoMedio();

        else

            return new FiatPuntoAllestimentoTop ();

      }

 

}

 

 

Il parametro di selezione nel nostro esempio è il prezzo. Quindi utilizzando le classi precedenti:

 

public class ComproAuto{

    int prezzo = 0;

 

    public ComproAuto (int prezzo){

        this.prezzo = prezzo;

    }

 

    // altri metodi

 

    public void acquista(){

        ……..

        FiatPunto auto = FactoryFiat.get(prezzo);

        auto.stampaAccessori();

        ……..

 

    }

 

 

    public static void main(String[] arg){

        ComproAuto auto = new ComproAuto(11.000);

       

        // verranno stampanti gli accessori dell’allestimento medio

        auto.acquista ();

    }

 

}

 

Durante l’invocazione del metodo stampaAccessori, metodo comune a tutte le classi figlie con implementazione diversa, verranno stampati gli accessori relativi alla classe restituita dalla factory anche se l’istanza ottenuta è quella della classe padre.

Marcello Pirazzoli

Print
Average (0 Votes)