Factory Method パターン

Advertisement

オブジェクト生成を管理するクラス

オブジェクトを生成するクラスを作成することにより、柔軟なオブジェクト生成ができるようになる。また、ひとつのインタフェースだけで、数種類のオブジェクト生成に対応することができる。

特徴

クライアントは自ら製品を作るのではなく、工場で作られた製品を受け取るだけでよい。

自ら製品を作る
Product p = new Product();

工場で作ってもらう
Product p = Factory.getProduct();

クライアントは工場内でどのように製品が作られるのか、意識する必要がない。

Product p = Factory.getProduct();
このコードを記述するクライアントでは、 Factory クラスの getProduct() メソッドがどのように実装されているか、知る必要がない。

実装

オブジェクトの生成メソッドのみをスーパークラスで実装しておき、細かい実装はサブクラスに任せる。

サンプルコード

抽象クラス Factory.java
abstract public class Factory {
    // オブジェクト作成の時に呼び出されるメソッド
    public final Product create(String serial){
        Product pro = this.make(serial);
        return pro;
    }

    // オブジェクトを生成するメソッド。実装はサブクラスに任せる。
    abstract public Product make(String serial);
}


インタフェース Product.java
public interface Product {
    abstract public void showSerialno();
}

実装クラス ToyFactory.java
public class ToyFactory extends Factory {
    public Product make(String serial) {
        return new Toy(serial);
    }
}

実装クラス Toy.java
public class Toy implements Product{
    private String serial = null;

    public Toy(String serial){
        this.serial = serial;
    }

    public void showSerialno(){
        System.out.println(this.serial);
    }
}

Main.java
public class Main {
    public static void main(String[] args){
        Factory factory = new ToyFactory();
        Product robot = factory.create("robo_001");
        Product car = factory.create("car_001");
        robot.showSerialno();
        car.showSerialno();
    }
}

クラス図

Factory Method

Advertisement

ショートカット

634トップページ
このカテゴリのトップページに戻る
634ラボ

サイト検索

Google

Web サイト内

Y!ログール