liguofeng29’s blog

個人勉強用ブログだっす。

デザインパターン - Factory Method

 【Factory Methodパターンとは】

インスタンスの生成をサブクラスに任せることで、柔軟なインスタンス生成が可能なパターン。

 

Factory Methodパターンのクラス図】

 

FactoryMethodパターンのメリット】

同じフレームワーク(Factory,Product)を使って、複数を製品が作りだせる。

代表的にDaoオブジェクトを作り出すなど

 

【サンプル】

Factory.java
package factoryMethod;
 
public abstract class Factory {
 
// 製品を作る
public Product create(String name) {
return createProduct(name);
}
 
// 具体的な製品をサブクラスで作る
protected abstract Product createProduct(String name);
}
 
 
 
Product.java
package factoryMethod;
 
/*
 * 製品IF
 */
public interface Product {
public void use();
}
 
 
KnifeFactory.java
package factoryMethod;
 
/*
 *刀工場
 */
public class KnifeFactory extends Factory{
 
@Override
protected Product createProduct(String name) {
return new Knife(name);
}
 
}
 
 
 
Knife.java
package factoryMethod;
 
/*
 * 刀クラス
 */
public class Knife implements Product{
 
private String name;
 
public Knife(String name) {
this.name = name;
System.out.println(this.name + "を作りました。");
}
 
@Override
public void use() {
System.out.println(this.name + "を使います。");
}
}
 
 
 
FactoryMethodTest.java
package factoryMethod;
 
public class FactoryMethodTest {
 
public static void main(String[] args) {
// 刀工場を生成
Factory factory = new KnifeFactory();
 
// 日本刀を作る
Product knife1 = factory.create("日本刀");
// 包丁を作る
Product knife2 = factory.create("包丁");
 
knife1.use();
knife2.use();
}
}
 
 
 
結果
日本刀を作りました。
包丁を作りました。
日本刀を使います。
包丁を使います。