はじめに
現在デザインパターンを絶賛学習中の新人エンジニアです。
デザインパターンは、一つずつのパターンの仕組みを理解することができたとしても、他パターンとの比較をして考えるととても難しく感じます。
そのため今回は、簡単にAbstractFactoryパターンの特徴を説明したあと、AbstractFactoryパターンとFactoryMethodパターン、Builderパターンとの違いを比較していきます。
Abstract Factoryパターンとは
AbstractFactoryパターンは、関連するオブジェクトのグループを、具体的なクラスを指定せずに生成するためのデザインパターンです。
オブジェクト群を作成するためのFactoryを提供します。各オブジェクト群は、異なる種類のオブジェクトを含み、Abstract Factoryはそれらを生成するための共通インターフェースを定義します。これにより、オブジェクト群の実装を変更する際に、クライアントコードに影響を与えずに新しいオブジェクト群を導入することが可能になります。
詳細な設計の仕方は、様々な書籍やサイトで説明されているため、ここでは省略します。
他パターンとの比較
Factory Methodパターンとの違い
FactoryMethodパターンは、オブジェクトを生成する際に、それぞれに最小限の設定をFactoryで定義し、持たせたうえでオブジェクトごとにカスタマイズすることができるデザインパターンです。すなわち、このパターンは関連の特性をもつ異なるオブジェクトを生成したい場合に用いられます。
イメージとしては、driverというメソッドが宣言されたTransportというインターフェイスが合った場合は、トラックやコンテナ船がプロダクトとして作成できるくらい幅が広い実装が出来るのがFactoryMethodパターンです。これに対してCarというインターフェイスがあった場合に、特定のテーマに応じた部品をインターフェイスにしたがって作成されていくのがAbstractFactoryパターンです。スポーツカーにはスポーツカー用の部品が,ファミリーカーにはファミリーカー用の部品が搭載されることが確約出来ます。
このように、Factory Methodパターンは個別のオブジェクト生成に特化しており、Abstract Factory パターンは製品の統一性を保ちながら、複数の関連するオブジェクトを生成することに特化しています。
Builderパターンとの違い
Builder パターンは、複雑なオブジェクトを段階的に構築しながら、部品の組み合わせを柔軟にカスタマイズできるデザインパターンです。
車の生成を例にすると、Builder パターンでは、エンジン・タイヤ・内装などの部品を自由に選び、順番に組み立てながらカスタマイズできます。ファミリーカー用の内装にスポーツエンジンを付けることも可能なイメージです。
これに対して、Abstract Factory パターンは、スポーツカーにはスポーツカー用の部品、ファミリーカーにはファミリーカー用の部品しか組み合わせて作成できません。言い換えると、組み合わせを間違える心配がなくなります。
このように、Builder パターンは段階的な構築と柔軟なカスタマイズに特化しており、Abstract Factory パターンはオブジェクト群の整合性を保ち、それぞれのオブジェクトは一貫したテーマで生成することに特化しています。
おわりに
今回は、AbstractFactoryパターンを簡単に説明し、類似パターンとの違いを明確にすることで、それぞれのパターンの理解を深めることができました。
今後も引き続きデザインパターンの学習を続けていきたいと思います。