Factory Method パターン

「Factory」という英単語は、「工場」を意味します。

このパターンでいう「Factory」とは、オブジェクト生産工場のことを言います。つまり、「Factory Method パターン」とは、オブジェクトの生成手順をパターン化したものです。
このパターンを適用すると、「オブジェクト作成のための手順(フレームワーク)を決める」役割りと「実際にオブジェクトを作成する」役割りを明確に分けて定義することができます。


役割り

1. Creator(作成者)
「Product」を作成します。オブジェクトの生成手順のみを定義し、実際の生成については、サブクラス(「ConcreteCreator」)が行います。
2. Product(製品)
当パターンで生成されるオブジェクト(「ConcreteProduct」)のインタフェースを決定します。
3. ConcreteCreator(具体的な作成者)
具体的な製品を作ります。
4. ConcreteProduct(具体的な製品)
具体的な製品を決定します。
5. Client(利用者)
「Factory Method」パターンを適用したクラスを利用し処理します。

▲PageTop

クラス図

Factory Methodパターンのクラス図

Factory Methodパターン クラス図

▲PageTop

サンプル

ソースコード

1. Creator.java

public abstract class Creator {
    public abstract Product factoryMethod();
    public final Product create() {
        Product product = factoryMethod();
        return product;
    }
}

2. Product.java

public abstract class Product {
    public abstract void method1();
    public abstract void method2();
}

3. ConcreteCreator.java

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

4. ConcreteProduct.java

public class ConcreteProduct extends Product {
    public void method1() {
        System.out.println("method1");
    }
    public void method2() {
        System.out.println("method2");
    }
}

5. Client.java

public class Client {
    public static void main(String[] args) {
        Creator creator = new ConcreteCreator();
        Product product = creator.factoryMethod();
        product.method1();
        product.method2();
    }
}

実行結果

C:\sample\desin_pattern\factory_method>javac Client.java [Enter]

C:\sample\desin_pattern\factory_method>java Client [Enter]
method1
method2
        

▲PageTop