ファクトリ パターンの概要
デザイン パターンは、ソフトウェア設計で繰り返し発生する問題を解決する方法です。ファクトリ パターンは、柔軟かつ分離された方法でオブジェクトを作成するのに役立つデザイン パターンの 1 つです。
ファクトリ パターンは、オブジェクトのクラスを明示的に知らなくてもオブジェクトの作成を可能にする C++ の作成デザイン パターンです。これは、複雑なオブジェクト作成ロジックを別のファクトリ クラス内にカプセル化する方法を提供します。これは、オブジェクトを作成するための共通インターフェイスを定義することによって行われ、オブジェクトの特定のクラスは実行時に決定されます。
オブジェクトを直接作成する代わりに、ファクトリ メソッドを使用して、必要なオブジェクトのインスタンスを取得します。こうすることで、オブジェクトの作成に伴う複雑な手順を非表示にし、将来のオブジェクトの変更や修正を簡単にすることができます。
ファクトリ パターンを使用する理由
ファクトリ パターンを使用する理由はいくつかあります。理由の 1 つは、特定のクラスからコードを分離できるためです。ファクトリ メソッドを使用すると、他のコードを変更することなく、あるクラスを別のクラスに簡単に切り替えることができ、効率が向上します。
ファクトリ パターンを使用するもう 1 つの理由は、コードをよりテストしやすくできることです。ファクトリ パターンを使用すると、モック オブジェクトを作成してコードをテストできます。
C++ でファクトリ パターンが使用されるその他の理由は次のとおりです。
- ファクトリ メソッド パターンは、クラスが作成する必要があるオブジェクトが事前にわからない場合に使用されます。
- このパターンは、クラスがそのサブクラスに依存して作成するオブジェクトを指定する場合に使用されます。
- これは、複雑なオブジェクトを作成するロジックを 1 か所にカプセル化する場合に便利です。
C++ のファクトリ パターンの例
C++ では、仮想ファクトリ メソッドを使用して抽象基本クラスを定義することにより、ファクトリ パターンを実装できます。このメソッドは、目的のクラス インスタンスへのポインターを返す必要があります。その後、この基本クラスから具象クラスを派生し、ファクトリ メソッドをオーバーライドして、適切なクラスのインスタンスを返すことができます。
ファクトリ パターンのこの実装を使用する方法の例を次に示します。
#include名前空間 std を使用する ;
クラス形状 {
公共 :
バーチャル 空所 描く ( ) = 0 ;
静的 形 * シェイプの作成 ( 整数 タイプ ) ;
} ;
クラスサークル : パブリックシェイプ {
公共 :
空所 描く ( ) {
コート << 「円を描く」 << 終わり ;
}
} ;
クラス長方形 : パブリックシェイプ {
公共 :
空所 描く ( ) {
コート << 「長方形を描きます。」 << 終わり ;
}
} ;
形 * 形 :: シェイプの作成 ( 整数 タイプ ) {
もしも ( タイプ == 1 ) {
戻る 新しいサークル ( ) ;
} それ以外 もしも ( タイプ == 2 ) {
戻る 新しい長方形 ( ) ;
} それ以外 {
戻る nullptr ;
}
}
整数 主要 ( ) {
形 * 丸 = 形 :: シェイプの作成 ( 1 ) ;
丸 -> 描く ( ) ;
形 * 矩形 = 形 :: シェイプの作成 ( 2 ) ;
矩形 -> 描く ( ) ;
戻る 0 ;
}
この例では、Circle と Rectangle という 2 つの派生クラスを持つ Shape クラスがあります。 Shape クラスには純粋仮想関数draw() があり、派生クラスによって実装されます。 Shape クラスには静的関数 createShape(int type) もあり、指定された型に基づいて派生クラスのインスタンスを作成するファクトリ メソッドとして機能します。作成されたオブジェクトに対してdraw() 関数が呼び出され、オブジェクトの特定の動作が示されます。
結論
ファクトリ パターンは、オブジェクトのクラスを明示的に知らなくてもオブジェクトの作成を可能にする C++ の作成デザイン パターンです。複雑な作成ロジックをファクトリ クラスの背後に隠すことで、オブジェクトを作成するための簡略化されたインターフェイスを提供します。これは、オブジェクトを作成するための共通インターフェイスを定義することによって行われ、オブジェクトの特定のクラスは実行時に決定されます。ファクトリ パターンについて詳しくは、この記事をご覧ください。