"Projekt mam na środę" - mistrzostwo :)
Generalnie wygląda to tak, że:
Macie powiedzmy jedną abstrakcyjną i trzy nieabstrakcyjne klasy:
abstract class Product {
// ...
}
class ProductA extends Product {
i tak samo dla ProductB i ProductC
Polimorficzna implementacja wygląda tak, że:
abstract class Creator {
public abstract Product create();
}
class CreatorA extends Creator {
public Product create(){
ProductA product = new ProductA();
// ...
return product;
}
}
I tak samo dla CreatorB i CreatorC
W przypadku statycznej implementacji podejrzewam, że to wyglądać powinno mniej więcej tak:
class StaticCreator {
public static Product createA(){
ProductA product = new ProductA();
// ...
return product;
}
public static Product createB(){
//...
}
Albo tak:
class StaticCreator {
private static int productType = ...;
public static Product create(){
Product product = null;
if(productType==0){
product = new ProductA();
// ...
} else if(productType==1){
product = new ProductB();
// ...
}
return product;
}
public static void setProductType(int type){
productType = type;
}
}
Chociaż szczerze mówiąc wydaje mi się że statyczna metoda wytwórcza łamie ideę metody wytwórczej.
BTW: można zamienić klasy abstrakcyjne na interfejsy.