Factory method

De Viquipèdia
Dreceres ràpides: navegació, cerca

El Factory Method és un patró de disseny del Software. Consisteix en utilitzar una classe constructora (semblant al Abstract Factory) abstracta amb uns quants mètodes definits i altes abstractes: el dedicat a la construcció dels objectes d'un subtipus d'un tipus determinat. És una simplificació del Abstract Factory, on la classe abstracta té mètodes concrets que fans servir alguns dels abstractes; segons usem una o altre filla d'aquesta classe abstracta, tindrem un comportament o un altre.

Estructura [modifica]

Les classes principals d'aquest patró són el creador i el producte. El creador necessita crear instancies de productes, però el tipus concret de producte no ha de ser forçat en les subclasses del creador, perquè aleshores les possibles subclasses del creador haurien de poder especificar subclasses del producte per utilitzar.


Factory method

La solució per fer això és utilitzar un mètode abstracte (el mètode de la fàbrica) que es defineix en el creador. Aquest mètode abstracte es defineix per a què torni el producte. Las subclasses del creador poden sobreescriure aquest mètode per tornar les subclasses apropiades del producte...

Exemples de codi (Java) [modifica]

// Definim la classe abstracte creadora
public abstract class Creator{
 // Operació que realitza 
 public Product anOperation() {
 Product aProduct = factoryMethod();
 return aProduct;
 }
 
 // Definim el mètode abstracte
 protected abstract Product factoryMethod();
}

Ara definim el creador concret.

public class ConcreteCreator extends Creator{
 protected Product factoryMethod() {
 return new ConcreteProduct();
 }
}

I definim el producte i la seva implementació concreta.

public interface Product{
 public void operacio();
}
 
public class ConcreteProduct implements Product{
 public void operacio(){
 System.out.println("Una operació d'aquest producte");
 }
}

i un exemple d'us :

public static void main(String args[]){
 Creator aCreator;
 aCreator = new ConcreteCreator();
 Product producte = aCreator.anOperation();
 producte.operacio();
}

Enllaços externs [modifica]