Factory Methodパターンは,オブジェクトの生成(インスタンス化)を派生クラスに委譲するパターンである.オブジェクトの生成を派生クラスに行わせることで,より柔軟に生成するオブジェクトを選択することが可能となる.
そもそもファクトリとは,オブジェクト生産工場のことであり,ファクトリ利用者はnew演算子を用いずに,ファクトリメソッドでオブジェクト生成を行うことになる.
FactoryMethodパターンの主な要素は以下である.
java// Product Interface
interface Product {
void operation();
}
// Concrete Product
class ConcreteProductA implements Product {
@Override
public void operation() {
System.out.println("ConcreteProductA operation");
}
}
class ConcreteProductB implements Product {
@Override
public void operation() {
System.out.println("ConcreteProductB operation");
}
}
// Creator
abstract class Creator {
public abstract Product factoryMethod();
}
// Concrete Creator
class ConcreteCreatorA extends Creator {
@Override
public Product factoryMethod() {
return new ConcreteProductA();
}
}
class ConcreteCreatorB extends Creator {
@Override
public Product factoryMethod() {
return new ConcreteProductB();
}
}
// Client
public class FactoryMethodPattern {
public static void main(String[] args) {
Creator creator = new ConcreteCreatorA();
Product product = creator.factoryMethod();
product.operation();
System.out.println();
creator = new ConcreteCreatorB();
product = creator.factoryMethod();
product.operation();
}
}
一時期Laravelを使っていたので,ずっとFactoryはLaravelでダミーデータを生成するときに使われるやつという認識でいたが,デザインパターンの考えが先にあるということを今回の勉強で知った.
Factory Methodパターンがどういうものかは知れたが,Laravelを使っていた時のバイアスが強く,ダミーデータ生成以外でどのような用途があるのかうまく考えられない(知らず知らずのうちに使っている可能性も大いにある).