It's interesting.

いつまでも中二病。

Factory MethodパターンとAbstract Factoryパターンの2つの違い

はじめに

Factory MethodパターンとAbstract FactoryパターンはどちらもFactory系だけど具体的にどう違うのかなと思っていると、こちらのサイトに自分の知りたいことがほとんど書いてありました。
dzone.com

簡単に内容をまとめたものをメモとして残しておこうと思います。
結論を先に述べると、2つのパターンの最大の違いは生成するインスタンスの数です。

Factory MethodパターンとAbstract Factoryパターン

まずは2つのパターンについて簡単に説明しておきます。

  • Factory Methodパターン

Template Methodパターンをインスタンス生成に応用したもので、スーパークラスでインスタンス生成するためのAPI (factory method) を定義しておき、サブクラスで具体的なインスタンス化の方法を各々実装します。

www.macky-studio.comwww.macky-studio.com

  • Abstract Factoryパターン

Abstract Factoryクラスがあるインスタンス及び、そのインスタンスの生成に必要なインスタンス群を生成するためのAPIを提供し、サブクラスでそれらの具体的な実装を行います。

Factory MethodパターンとAbstract Factoryパターンの違い

2つのパターンの違いは大きく分けて2つあります。
それぞれ順番に説明していきます。

  • 生成するインスタンスの数

Factory Methodパターンは一つのインスタンスを生成するためのものですが、Abstract Factoryパターンは複数の部品を組み合わせて一つのインスタンスを生成する時に使います。

  • メソッドかクラスか

名前の通り、Factory Methodはメソッドで、Abstract Factoryはクラスで表現します。
Factory Methodは単なるメソッドに過ぎず、Factory Methodを持つクラスの役割はインスタンス生成だけとは限りません。
一方、Abstract Factoryクラスの役割は一連のインスタンスを生成することです。

また、メソッドかクラスかに伴って抽象度も異なります。
Factory Methodパターンはメソッドレベルの抽象化ですが、Abstract Factoryパターンはクラスレベルの抽象化なので、後者の方がより抽象的です。

おわりに

参考サイトには理解できない部分もあったので、自分のわかる範囲でまとめましたが、以上がFactory MethodパターンとAbstract Factoryパターンの違いです。
生成するインスタンス・部品の数や抽象化のレベルを意識するといい感じだと思います。