FactoryMethodパターン Java

2015/07/19

FactoryMethodパターン Java

デザインパターンの一つであるFactoryMethodパターンについて記述する。



FactoryMethodパターンとは?

Javaオブジェクトはsuperクラスを定義し、抽象メソッドの実装をsubクラスで実装する。
そうすることで、柔軟なJavaクラスを作成することができ、使い回しのきくアーキテクチャになる。

FactoryMethodパターンは、インスタンスの生成を簡潔できることで、テストするための実装としても使えると個人的には思う。

サンプルコード

抽象的なProductクラスを実装。

1
2
3
public abstract class Product {
abstract void use();
}

抽象的なFactoryクラスを実装。

1
2
3
4
5
6
7
8
9
10
11
public abstract class Factory {

public final Product create(String name) {
Product product = create(name);
register(product);
return product;
}

protected abstract Product create(String name);
protected abstract void register(Product product);
}

具象的なAccountFactoryクラスを実装。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class AccountFactory extends Factory {

private List names = new ArrayList();

protected Product create(String name) {
return new Account(name);
}

protected void register(Product product) {
owners.add(((Account)product).getNames());
}

public List getNames() {
return names;
}
}

具象的なAccountクラスを実装。

1
2
3
4
5
6
7
8
9
10
11
12
public class Account extends Product {

private String name;

Account(String name) {
this.name = name;
}

public String getName() {
return this.name;
}
}

Mainクラスの実装。

1
2
3
4
5
6
7
8
9
public class Main {
public static void main(String[] args) {
Factory factory = new AccountFactory();
Product account01 = factory.create("account01");
Product account02 = factory.create("account02");
Product account03 = factory.create("account03");
Product account04 = factory.create("account04");
}
}