logo

Modello del metodo di fabbrica

Un modello di fabbrica o un modello di metodo di fabbrica dice proprio questo definire un'interfaccia o una classe astratta per creare un oggetto ma lasciare che siano le sottoclassi a decidere quale classe istanziare. In altre parole, le sottoclassi sono responsabili della creazione dell'istanza della classe.

Il modello del metodo Factory è anche noto come Costruttore virtuale.

Vantaggio del modello di progettazione di fabbrica

  • Factory Method Pattern consente alle sottoclassi di scegliere il tipo di oggetti da creare.
  • Promuove il accoppiamento lasco eliminando la necessità di associare classi specifiche dell'applicazione nel codice. Ciò significa che il codice interagisce esclusivamente con l'interfaccia risultante o la classe astratta, in modo che funzioni con qualsiasi classe che implementi quell'interfaccia o che estenda quella classe astratta.

Utilizzo del modello di progettazione di fabbrica

  • Quando una classe non sa quali sottoclassi dovrà creare
  • Quando una classe vuole che le sue sottoclassi specifichino gli oggetti da creare.
  • Quando le classi madri scelgono la creazione di oggetti nelle sue sottoclassi.

UML per modello del metodo di fabbrica

  • Creeremo una classe astratta Plan e classi concrete che estendono la classe astratta Plan. Come passaggio successivo viene definita una classe factory GetPlanFactory.
  • La classe GenerateBill utilizzerà GetPlanFactory per ottenere un oggetto Plan. Passerà le informazioni (PIANO DOMESTICO / PIANO COMMERCIALE / PIANO ISTITUZIONALE) a GetPalnFactory per ottenere il tipo di oggetto di cui ha bisogno.

Calcolare la bolletta elettrica: un esempio reale del metodo di fabbrica

Passo 1: Creare una classe astratta Plan.

 import java.io.*; abstract class Plan{ protected double rate; abstract void getRate(); public void calculateBill(int units){ System.out.println(units*rate); } }//end of Plan class. 

Passo 2: Crea le classi concrete che estendono la classe astratta Plan.

 class DomesticPlan extends Plan{ //@override public void getRate(){ rate=3.50; } }//end of DomesticPlan class. 
 class CommercialPlan extends Plan{ //@override public void getRate(){ rate=7.50; } }//end of CommercialPlan class. 
 class InstitutionalPlan extends Plan{ //@override public void getRate(){ rate=5.50; } }//end of InstitutionalPlan class. 

Passaggio 3: Crea una GetPlanFactory per generare oggetti di classi concrete in base alle informazioni fornite.

 class GetPlanFactory{ //use getPlan method to get object of type Plan public Plan getPlan(String planType){ if(planType == null){ return null; } if(planType.equalsIgnoreCase('DOMESTICPLAN')) { return new DomesticPlan(); } else if(planType.equalsIgnoreCase('COMMERCIALPLAN')){ return new CommercialPlan(); } else if(planType.equalsIgnoreCase('INSTITUTIONALPLAN')) { return new InstitutionalPlan(); } return null; } }//end of GetPlanFactory class. 

Passaggio 4: Genera fattura utilizzando GetPlanFactory per ottenere l'oggetto di classi concrete passando informazioni come il tipo di piano DOMESTICPLAN o COMMERCIALPLAN o INSTITUTIONALPLAN.

 import java.io.*; class GenerateBill{ public static void main(String args[])throws IOException{ GetPlanFactory planFactory = new GetPlanFactory(); System.out.print('Enter the name of plan for which the bill will be generated: '); BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); String planName=br.readLine(); System.out.print('Enter the number of units for bill will be calculated: '); int units=Integer.parseInt(br.readLine()); Plan p = planFactory.getPlan(planName); //call getRate() method and calculateBill()method of DomesticPaln. System.out.print('Bill amount for '+planName+' of '+units+' units is: '); p.getRate(); p.calculateBill(units); } }//end of GenerateBill class. 

scarica questo esempio di bolletta elettrica

Produzione