abstract Factory Pattern


userはabstractクラスやinterfaceだけを使い目的物を得る
userはFactory Patternを利用ことで、目的物の組成に必要な各種オブジェクトや、その組み合わせを意識する必要がない

以下ではabstract Factory Patternのサンプルコードを記述します

Design Pattarm MENU

以下のクラス構成とします

クラス 説明
abstract
factory.class
abstract createメソッドを定義
samFactoryA.class factoryを拡張する
目的物を組成するに必要なパーツクラスを生成し組み合わせる
samFactoryB.class 同上
interface face1
interface face2
パーツ用インターフェイス
parts1.class ~ parts4.class 目的物の組成に必要なパーツクラス
user(Main.class) 動作を確認

*user 他の開発者がこのパターンを利用する、という意味合いを含みます

下記のサンプルコードでは2つのFactoryを使っています
abstract Factory Patternは容易に複数のFactoryを作れるため
userの利便性が上がる特徴があります

factory.class
abstract class factory{
  String msg;
  int    len;

  factory(String msg){
    this.msg = msg;
    len =msg.length();
  }

  abstract String create();
}
samFactoryA.class
class samFactoryA extends factory{
  samFactoryA(String msg){super(msg);}

  String create(){
    String partsA = new partsA().s;
    String partsB = new partsB().s;
    return partsA+super.msg+partsB;
}}
samFactoryB.class
class samFactoryB extends factory{
  samFactoryB(String msg){super(msg);}

  String create(){
    String partsA = new partsA().s;
    String partsB = new partsB().s;
    String partsC = new partsC().s;
    String partsD = new partsD().s;
    return partsA+partsC + super.msg + partsD+partsB;
}}
interface_face1
interface face1{}
class partsA implements face1{String s="<<< ";}
class partsB implements face1{String s=" >>>";}

interface face2{}
class partsC implements face2{String s="[[[ ";}
class partsD implements face2{String s=" ]]]";}
user(Main.class)
public static void main(String[] args){
  factory f1 = new samFactoryA("Hello java");
    System.out.println(f1.create());

  factory f2 = new samFactoryB("HELLO JAVA");
    System.out.println(f2.create());
}}