JavaでHello World
Google
  HOME  |  基礎  |  掲示板  |  ツール |  書籍  |  デザインパターン  |  リンク  |  フィードバック
JavaでHello World > デザインパターン > Abstract Factoryパターン  
メニュー
Home
情報交換掲示板
Factory Method
Abstract Factory
Builder
Prototype
Singleton
Adapter
Bridge
Composite
Decorator
Facade
Flyweight
Proxy
Chain Of Responsibility
Command
Interpreter
Iterator
Mediator
Memento
Observer
State
Strategy
Template Method
Visitor
  2003/07/25  田中宏和
Abstract Factory パターン
◆概要
互いに関連したり依存したりするオブジェクト群をその具象クラスを明確にせずに生成するためのインターフェースを提供する
◆UML
◆ここでの環境
OS Windows XP
J2SE SDK 1.4.1_01
Tomcat 4.0.6
◆概念的なソースコード
AbstractProductA.java(ここからダウンロード)
abstract class AbstractProductA {
  abstract public void actionA();
}
ProductA1.java(ここからダウンロード)
public class ProductA1 extends AbstractProductA {
  public void actionA() {
    System.out.println("ProductA1");
  }
}
ProductA2.java(ここからダウンロード)
public class ProductA2 extends AbstractProductA {
  public void actionA() {
    System.out.println("ProductA2");
  }
}
AbstractProductB.java(ここからダウンロード)
abstract class AbstractProductB {
  abstract public void actionB();
}
ProductB1.java(ここからダウンロード)
public class ProductB1 extends AbstractProductB {
  public void actionB() {
    System.out.println("ProductB1");
  }
}
ProductB2.java(ここからダウンロード)
public class ProductB2 extends AbstractProductB {
  public void actionB() {
    System.out.println("ProductB2");
  }
}
AbstractFactory.java(ここからダウンロード)
abstract class AbstractFactory {
  abstract public AbstractProductA createProductA();
  abstract public AbstractProductB createProductB();
  static AbstractFactory getFactory() {
    String s = "1"; // ← 環境によって値が変わる変数
    if (s.equals("1")) {
      return new ConcreteFactory1();
    } else if (s.equals("2")){
      return new ConcreteFactory2();
    }
    return null;
  }
}
ConcreteFactory1.java(ここからダウンロード)
public class ConcreteFactory1 extends AbstractFactory {
  public AbstractProductA createProductA() {
    return new ProductA1();
  }
  public AbstractProductB createProductB() {
    return new ProductB1();
  }
}
ConcreteFactory2.java(ここからダウンロード)
public class ConcreteFactory2 extends AbstractFactory {
  public AbstractProductA createProductA() {
    return new ProductA2();
  }
  public AbstractProductB createProductB() {
    return new ProductB2();
  }
}
Client.java(ここからダウンロード)
public class Client {
  public static void main(String[] args) {
    AbstractFactory factory = AbstractFactory.getFactory();
    AbstractProductA pA = factory.createProductA();
    AbstractProductB pB = factory.createProductB();

    pA.actionA();
    pB.actionB();
  }
}
 
◆実行
コマンドプロンプト
C:\JavaHello\Abstract Factory >javac *.java

C:\JavaHello\Abstract Factory>java Client
ProductA1
ProductB1

C:\JavaHello\Factory Method>

おおお!実行できましたね!

 
 
  ネットで買えば断然お得!お買い物なら楽天市場
ツールの部屋 - Java関連の書籍 - デザインパターン - 情報交換掲示板 - HOME