【ふぁくとりーぱたーん】

Factoryパターン とは?

最終更新:
💡 オブジェクトの「生成工場」を作って分離する

オブジェクトの生成を別のクラスやメソッドに任せ、利用側から生成の詳細を分ける設計の総称。単純な生成関数や、Factory Method・Abstract Factoryなどの形がある。

📌 このページのポイント
生成の詳細を、利用側から分ける 利用する側 生成の窓口 依頼 PDF用 CSV用 出力形式に応じ いずれかを生成 図は単純なFactoryの例 Factory Method Abstract Factory サブクラスが 生成型を決める 関連製品を 同じ系列で作る 「単品かセットか」だけで区別しない
生成の窓口を使うだけでは、GoFのFactory Methodとは限らない。利用側は受け取った製品の共通インターフェースを使う。
ひよこ ひよこ
なぜnewで直接作らないの?
ペンギン先生 ペンギン先生
具体的なクラスの生成を利用側に散らすと、変更が多くの場所に及ぶことがあるよ。生成を窓口に任せれば、その詳細を分けられる。ただしnewを禁止する原則ではないし、必ず変更が1箇所だけで済むわけでもない。生成側の内部でnewを使ってもよいんだ。
ひよこ ひよこ
Factory MethodとAbstract Factoryの違いは?
ペンギン先生 ペンギン先生
Factory Methodは、生成メソッドをサブクラスで実装・変更し、具体的な型を決めるパターンだよ。メソッドが1つあるだけでは、このパターンとは限らない。Abstract Factoryは、たとえばボタンとチェックボックスを同じ見た目の系列で作る窓口。種類の数だけで区別するものではないんだ。
ひよこ ひよこ
実際にはどう使うの?
ペンギン先生 ペンギン先生
たとえば出力形式を指定してPDF用やCSV用の出力オブジェクトを受け取る窓口を用意するよ。条件分岐で型を選ぶ単純なFactoryでも、この分離はできる。利用側が共通のインターフェースを使う設計なら、出力方法の詳細を知らずに処理を依頼できるね。
ひよこ ひよこ
使いすぎの問題は?
ペンギン先生 ペンギン先生
生成が単純で変更の必要もないなら、クラスや呼び出しの段階を増やすだけになる場合があるよ。どの生成の詳細を隠したいか、どこを切り替えたいかを考える。単純なFactoryから必ずFactory Methodへ進むという順番でもないし、テストの差し替えが自動でできるわけでもないんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Factoryパターン」って出てきたら「オブジェクトの生成を専用の仕組みに任せるパターン」と思えればだいたいOK!
📖 おまけ:英語の意味
「Factory Pattern」 = 工場パターン
💬 Factory(工場)のように、注文に応じた製品(オブジェクト)を生産する仕組みだよ

参考資料

← 用語集にもどる