Factory Method Design Pattern

Factory Method Design Pattern

Scopo: definire un’interfaccia per creare oggetti, si delega a delle sottoclassi la decisioni di quali classi instanziare.
Motivazione: permette l’utilizzo di frameworks dove chi sa quali classi instanziare non è il framework.
In pratica abbiano una classe con un metodo che crea un oggetto, il nostro obiettivo è estendere l’oggetto creato sovrascrivendone i metodi.


Esempio:

class FactoryM {

B createB()                             //Factory method dove creo l’oggetto desiderato
{
    Return new B();
}
public int f()
{
   B b = create B();
   x = b.doSomething();
   return x;
}
}

In questo modo se desidero estendere la classe B modificando i metodi o creandone di nuovi, non devo toccare il codice della classe FactoryM per utilizzare la classe estesa di Bext ma basta creare una classe estesa di FactoryM dove devo solo fare l’override del metodo create per utilizzare la classe estesa Bext

Class FactoryMext extends FactoryM
{
   B createB()
{
   return new Bext();
}
}

Class B {
         Int doSomething(){return 0; }
}

Class BX extends B {
  Int doSomething()
    {
     lanciaBomba();
     return super.doSomething() + 1;
    }
}