Categories
デザインパターン

Abstruct Factory パターン

概要

 Abstract Factory パターンは、ソフトウェアデザインパターンの一つであり、オブジェクト指向プログラミングにおいて、関連する一連のオブジェクトを生成するためのインタフェースを提供します。このパターンは、特定のクラスの具体的な実装を隠蔽し、クライアントコードが具体的な実装に依存することなく、関連オブジェクトを生成することを可能にします。

 Abstract Factoryパターンでは、抽象的なファクトリー(Factory)クラスが定義され、関連する一連の抽象製品(Product)クラスの生成メソッドを提供します。具体的なファクトリークラスは、抽象ファクトリークラスを継承して実装され、特定の製品クラスのインスタンスを生成します。これにより、クライアントコードは抽象ファクトリークラスを通じて製品を生成し、具体的な実装に関与することなく、異なる製品のファミリーを扱うことができます。

 このパターンの主な目的は、クライアントコードと具体的な製品クラスの間の結合を緩和し、柔軟性と拡張性を向上させることです。例えば、異なるオペレーティングシステムに対応するGUI(グラフィカルユーザインターフェース)を作成する場合、Abstract Factoryパターンを使用することで、クライアントコードを変更することなく、異なるオペレーティングシステムごとに異なるGUIコンポーネントのファミリーを生成できます。

 つまり、Abstract Factoryパターンは、関連する一連のオブジェクトを生成するためのインタフェースを提供し、クライアントコードと具体的な実装の結合を緩和することで、柔軟性と拡張性を向上させるデザインパターンです。

コード例

この例では、2つの抽象的な製品クラスであるAbstractProductAとAbstractProductBを定義しています。ConcreteProductA1、ConcreteProductA2、ConcreteProductB1、ConcreteProductB2の具体的な製品クラスは、これらの抽象製品クラスを実装します。

抽象ファクトリークラスであるAbstractFactoryは、抽象製品を生成するための純粋仮想関数を宣言しています。ConcreteFactory1とConcreteFactory2の具体的なファクトリークラスは、抽象ファクトリークラスを継承し、特定の具体製品を生成するための実装を提供します。

main関数では、具体的なファクトリー(factory1とfactory2)のインスタンスを作成し、それらを使用して具体的な製品(productAとproductB)を生成します。最後に、生成された製品の使用方法をデモンストレーションしています。

生成された製品のメモリを解放するために、deleteを使用することを忘れないでください。