2 つのオブジェクトを構築する必要がAありBます。これらAとBオブジェクトはさまざまな方法で初期化できます。
構築する設計パターンA(作業中):
AサブクラスA_txt、A_tsv、A_csvなどがあります。各Aサブタイプは (ファイル パス) から構築されstringますが、それぞれが異なる方法でファイルをロードします。そのオブジェクトを作成するための適切なファクトリにファイルの種類 (例 ) をマップするレジストリを作成しました。txt
txt--> A_txt_Factory
tsv--> A_tsv_Factory
...
WhereA_txt_factoryはファイル パスを受け取り、それをテキスト ファイルとして読み込み、A_txtオブジェクトへのポインターを返します。
一緒に、このレジストリをファクトリとして使用します。ファイル パスとファイル タイプを指定すると、そのタグに対応するファクトリを検索し、それを使用してAオブジェクトを構築し、ポインタを返します。
この組み合わせのレジストリとファクトリ デザイン パターンがとても気に入っています。他の誰かが簡単に独自のファイル タイプとそれをロードするためのファクトリを作成し、それをレジストリにチェックインして、他のコードを見ずに使用することができます。
構築する設計パターンB(助けが必要):
Bすべてが同じタイプから読み込まれるわけではないため、オブジェクトの構築はより困難です (たとえば、すべてのAサブタイプはstringファイル パスを示す で構築されます)。B_textはテキスト ファイルから (stringファイル パスを示す提供された から) ロードしますが、以前とは異なりB_intAndA、 int および のインスタンスから初期化できますA。
どのようなデザイン パターンを使用して作成できますBか? 前と同じように、stringどのファクトリを使用するかを示すタグを付けます。ただし、以前とは異なり、各ファクトリは異なるパラメーター (および場合によっては異なる数のパラメーター) を受け入れます。可変パラメータの可変テンプレート関数を使用して何とか達成できると思います(私はC++ 11を使用しているので、それはオプションです)。
この設計パターンは、他の誰か (同じ基本クラスですが、異なる型の異なる数の引数で構築されています) に出くわすことはありますか?
さまざまなサブタイプを構築する個々のファクトリを作成するのは簡単ですが、Bさまざまなタイプと数のパラメーターを受け入れるため、レジストリでインデックスを作成できるようにする方法を知るのは困難です。
これをどのように処理しますか?