これに正式な名前があるかどうかはわかりませんが、「セルフファクトリー」パターンと呼んでいるもので遊んでいます。基本的には、抽象基本クラスがそれ自体のファクトリとして機能する場合です。説明させてください:
私のシステムには Foo オブジェクトと Bar オブジェクトがあり、これらはインターフェース FooInterface と BarInterface を介して使用されます。クライアントに正しいタイプの Foo と Bar を提供する必要があります。どの具体的な Foo オブジェクトを作成するかは、コンパイル時に決定されます。たとえば、win32 でコンパイルする場合は Win32Foo オブジェクトのみを作成し、OSX でコンパイルする場合は OSXFoo オブジェクトのみを作成します。ただし、どの具体的な Bar オブジェクトを作成するかは、キー文字列に基づいて実行時に決定されます。
さて、私の質問は、このスキームを実装する最良の方法についてです。私が思いつく1つの方法は、通常の工場を使用します:
shared_ptr<FooInterface> foo = FooFactory::create();
shared_ptr<BarInterface> happyBar = BarFactory::create("Happy");
shared_ptr<BarInterface> sadBar = BarFactory::create("Sad");
別の方法は、私が「セルフファクトリー」と呼んでいるものを使用することです:
shared_ptr<FooInterface> foo = FooInterface::create();
shared_ptr<BarInterface> happyBar = BarInterface::create("Happy");
shared_ptr<BarInterface> sadBar = BarInterface::create("Sad");
ユーザビリティの観点とアーキテクチャの観点の両方から、各アプローチの長所と短所は何ですか?