なんでデザインパターンの話になるとJavaなのかね?
まぁ、概念が解れば他の言語にでも応用は可能だけど。
さくっとサンプルコードを書いてみました。
package org.example.factory.creator;
public abstract class Product {
    public abstract void methodA();
    public abstract void methodB();
}
package org.example.factory.creator;
public abstract class Creator {
    public final Product create() {
        Product product = factoryMethod();
        return product;
    }
    protected abstract Product factoryMethod();
}
package org.example.factory.concrete;
import org.example.factory.creator.Product;
public class ConcreteProduct extends Product {
    public ConcreteProduct() {
        super();
    }
    public void methodA() {
    }
    public void methodB() {
    }
}
package org.example.factory.concrete;
import org.example.factory.creator.Creator;
import org.example.factory.creator.Product;
public class ConcreteCreator extends Creator {
    protected Product factoryMethod() {
        return new ConcreteProduct();
    }
}
package org.example.factory;
import org.example.factory.creator.*;
import org.example.factory.concrete.*;
public class Main {
    public static void main(String[] args) {
        Creator factory = new ConcreteCreator();
        Product object = factory.create();
        object.methodA();
        object.methodB();
    }
}
抽象クラスProductとCreatorを作成します。
Creatorクラスではcreateメソッドを実装していますが、その実態であるfactoryMethod()は抽象メソッドです。
これを使用するにはProductとCreatorを実装したクラスを作成する必要があります。
それがConcreteProductとConcreteCreatorという例で作成しています。
使用する場合は、まずはConcreteCreatorをインスタンス化し、Creator型で保持します。
以後、create()メソッドを使用して、ConcreteProductのインスタンスを作成して使用します。
新しいProductを追加する場合は、同じようにProductとCreatorを実装するクラスを作成し、Creator型で新しいCreatorをインスタンス化して使用すれば対応可能です。
このパターンを使用するメリットとしては、Productを作成する窓口がcreate()メソッドに一本化されます。
Productの初期設定をfactoryMethod()内に実装すれば、Productに対するあれこれ設定をするという余計な手間が省けます。
		










