ファクトリーパターンと抽象ファクトリーパターンの違いとは?分かりやすく解説!

この記事には、アフィリエイト広告を利用しています。

スポンサーリンク


ファクトリーパターンと抽象ファクトリーパターンの主な違いは、ファクトリーパターンがオブジェクトの作成に使用するクラスを厳密に指定せずにオブジェクトを作成する方法を提供するのに対し、抽象ファクトリーパターンは個々のファクトリーのグループをその具象クラスを指定せずに結合する方法を提供する点です。

デザインパターンは、ソフトウェア開発者がソフトウェアを開発する際に直面する一般的な問題に対する解決策です。

デザインパターンは汎用的であり、システムの種類やプログラミング言語には依存しない。

さらに、デザインパターンは実証済みの解決策であり、ベストプラクティスを提供する。

デザインパターンには、創造的パターン、構造的パターン、行動的パターンの3種類があります。

創造的パターンは、創造的なロジックを隠蔽しながらオブジェクトを生成する方法を提供する。

また、プログラムをより柔軟なものにする。

ファクトリーパターンと抽象ファクトリーパターンは、このような創造的デザインパターンの2つです。

スポンサーリンク

ファクトリーパターンとは

ファクトリーパターンは、オブジェクトを作成するための優れた手法を提供します。

この方法を使うと、プログラマはオブジェクトを作成するロジックを公開することなく、オブジェクトを作成することができます。

また、作成したオブジェクトを共通のインターフェースで参照することも可能です

以下のプログラムを参照してください。

図2:Rectangleクラス

図3: 四角形クラス

図5: ShapeFactoryクラス

図6: メインクラス

Shape インターフェースは draw という抽象メソッドを持っています。

Rectangle、Square、Circle はクラスです。

これらは Shape インターフェースを実装しています。

従って、これらのクラスは draw メソッドの実装を提供します。

各クラスの draw メソッドは、それぞれ独自の実装を持っています。

ShapeFacotryクラスは、getShapeというメソッドを持っています。

これは文字列を取得します。

  このメソッドは受け取った文字列に応じたオブジェクトを返します。

mainメソッドの中に、shapeというオブジェクトがあります。

これはShapeFactory型です。

そのオブジェクトを使ってgetShapeメソッドを呼び出しています。

Rectangle “という文字列が渡されます。

返ってきたオブジェクトはshape1というShape型のオブジェクトに格納される。

同様に、文字列 “SQUARE “と “CIRCLE “がgetShapeに渡されています。

返されたオブジェクトは shape2 と shape3 に格納される。

それぞれのオブジェクトは draw メソッドを呼び、渡された文字列に従って対応する draw メソッドが実行される。

メインプログラムでは、ShapeFactory クラスを使用して Shape オブジェクトを取得しています。


ShapeFactoryに必要な文字列を渡して、必要なオブジェクトの種類を取得します

抽象ファクトリーパターンとは

Abstract Factoryパターンは、スーパーファクトリーを使用し、他のファクトリーを作成するパターンです。

ファクトリーのファクトリーとも呼ばれる。

このパターンでは、インターフェースは関連するオブジェクトのファクトリーを、そのクラスを明示的に指定することなく作成します。

つまり、スーパーファクトリーを作成した後、他のファクトリーを作成することができる。

以下のプログラムを参照してください。

図7:カラーインターフェース

図8: Yellow クラス

図9:Orange クラス

図10: Purple クラス

図11:AbstractFactoryクラス

図12: ShapeFactoryクラス

図13:ColorFactoryクラス

図14:FactoryProducerクラス

図15: メインプログラム

インターフェース Shape とクラス Rectangle, Square, Circle は前節と同じです。

Colorはインタフェースであり、fillという抽象メソッドを持ちます。

Yellow, Orange, Purpleクラスはこのインタフェースを実装しています。

従って、これらのクラスはfillメソッドの実装を提供します。

AbstrcatFactoryクラスはgetShapeとgetColorという2つのメソッドを持っています。

ShapeFactoryクラスはAbstractFacotryを継承しています。

同様に、ColorFactoryクラスもAbstractFactoryを継承しています。

これらのクラスはgetShapeとgetColorのメソッドを実装しています。

FactoryProducerクラスはAbstractFactory型のオブジェクトを返すgetFactoryというメソッドを持っています。

取得した文字列に応じて、ShapeFactoryオブジェクト、ColorFactoryオブジェクト、またはNULLを返します。

最後に、mainメソッドはFactoryProducerを使ってAbstractFactoryを取得し、具象クラスのファクトリーを取得します。

さらに、mainメソッドはFactoryProducerを使用してAbstractFactoryオブジェクトを取得します。

AbstractFactoryには “RECTANGLE”, “SQUARE”, “CIRCLE “などの情報を渡し、必要なオブジェクトの種類を取得します

さらに、”YELLOW”, “ORANGLE”, “PURPLE “などの情報も渡して、必要なオブジェクトの種類を取得しています

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

定義

ファクトリーパターンとは、オブジェクトを生成する際に、生成されるオブジェクトのクラスを厳密に指定することなく対処する方法を用いた創造的パターンです。

一方、抽象ファクトリーパターンは、共通のテーマを持つ個々のファクトリーのグループを、その具体的なクラスを指定せずにカプセル化する方法を提供する創造的なパターンです。

このように、これらの定義はファクトリーパターンと抽象ファクトリーパターンの主な違いを説明するものです。

施工を隠す

ファクトリーパターンと抽象ファクトリーパターンのもう一つの違いは、ファクトリーパターンが単一のオブジェクトの構築を隠すのに対し、抽象ファクトリーパターンは関連するオブジェクトのファミリーの構築を隠す点です。

結論

FactoryパターンとAbstract Factoryパターンは、オブジェクトを作成するデザインパターンです。

Factoryパターンは、オブジェクトを作成する際に使用するクラスを厳密に指定することなくオブジェクトを作成する方法を提供する。

これに対して、抽象ファクトリーパターンは、個々のファクトリーの具体的なクラスを指定することなく、そのグループを結合する方法を提供する。

 これがファクトリーパターンと抽象ファクトリーパターンの主な違いです。

タイトルとURLをコピーしました