私にはクラスFoo
があります。クラスは複数のコンストラクタを持っています。コンストラクタを選択するためのより良いパターン
class Foo
{
public:
Foo(Param1, Param2);
Foo(Param1, Param3, Param4);
Foo(Param1, Param4);
Foo(Param1, Param2, Param4);
}
コンストラクタへのparamsの実際のリストは大きく、私は他のプロジェクト(そうでない場合、私はこれらの4つのコンストラクタをエクスポートする必要があります)から直接これらのコンストラクタへのアクセスを提供する必要はありません。私はそのような複数のコンストラクタが避けるために最良のパターンを知っているビルダパターンです。しかし、これは、このクラスのクライアントにとって、paramはオプションであり、paramはオプションではないという混乱を招きます。さらに、各コンストラクターは、パラメーターに基づいて特定の検証を行います。したがって、実際にこのオブジェクトのメソッドを使用する前に、このような検証を行うために共通の場所が必要です。
変更なし
Foo
クラス:ので、現在私たちが計画しているものは、以下のようなものです。
FooParam
構造体struct FooParam { Param1 p1; Param2 p2; Param3 p3; Param4 p4; }
ファクトリーを定義します。どのようにしてください
Foo* CreateFoo(FooParams& foo) { if(foo.Param2) { if(foo.Param4) { return new Foo(foo.param1, foo.param2, foo.param4); } else return new Foo(foo.param1, foo.param2); } else if(foo.param4) { if(foo.param3) return new Foo(foo.param1, foo.param3, foo.param4); else return new Foo(foo.param1, foo.param4); } throw new Exception("Invalid Parameter"); }
しかし、今の?ユーザーとして
param1のデータ型は何ですか? –
デフォルト値のオプションもあります –
複数のコンストラクタの利点は、どのパラメータが一緒になっているかが非常に明確であることです。 'struct FooParam'はすべてが複雑になっているようです。なぜコンストラクタをエクスポートできないのですか? – Gene