2016年9月6日火曜日

Abstract Factoryパターン

みなさん こんばんは。

今回はAbstract Factoryパターンについて書いていきます。

Abstract Factoryパターンは1つのFactoryクラスに複数のFactoryメソッドを持たせ

主に実装環境に依存するような場合などに利用されます。

Abstract Factoryパターンの古典的な例として、WindowsやMacintoshなど、

複数のルック&フィールドのユーザインターフェースをまとめて切り替えるような例で使われたりします。

グループ化されたオブジェクト単位で切り替える場合に利用されるパターンがAbstract Factoryパターンと言えるでしょうか。

では簡単な例を見てみましょう。


// Abstract Factory基底インターフェース
public interface AbstractFactory {
    public Product1 createProduct1();
    public Product2 createProduct2();
}

// 製品基底インターフェース1
public interface Product1 {
    public void sayHello();
}

// 製品基底インターフェース2
public interface Product2 {
    public void goodNight();
}

// 製品実装クラス1
public class ConcreateProduct1 implements Product1 {
    public void sayHell(){
        System.out.println("こんにちは。こちらが製品1になります。");
    }
}

// 製品実装クラス2
public class ConcreateProduct2 implements Product2 {
    public void goodNight(){
        System.out.println("こんばんは。こちらが製品2になります。");
    }
}

// AbstractFactory実装クラス
public class ConcreateFactory implements AbstractFactory {
    public Product1 createProduct1() {
        return new ConcreateProduct1();
    }
    public Product2 createProduct2() {
        return new ConcreateProduct2();
    }
}

// クライアントクラス
public class Client {
    public static void main(String args[]) {
         AbstractFactory factory = new ConcreateFactory(); 
         Product1 p1 = factory.createProduct1();
         Product2 p2 = factory.createProduct2();
         p1.sayHello();
         p2.goodNight();
    }
}

クラス図の通り実装してみました。
Abstract Factoryクラスの利点は、新たな(ファクトリ用の)サブクラスを容易に追加できる点に
あると思います。

人気ブログランキングへ

0 件のコメント:

コメントを投稿