私のアプリケーションには、1 回インスタンス化される 10 ~ 20 個のクラスがあります[*]。次に例を示します。
class SomeOtherManager;
class SomeManagerClass {
public:
SomeManagerClass(SomeOtherManager*);
virtual void someMethod1();
virtual void someMethod2();
};
クラスのインスタンスは、1 つのオブジェクトに含まれています。
class TheManager {
public:
virtual SomeManagerClass* someManagerClass() const;
virtual SomeOtherManager* someOtherManager() const;
/** More objects... up to 10-20 */
};
現在、TheManager はnew演算子を使用してオブジェクトを作成します。
私の意図は、プラグインを使用して、SomeManagerClass (または他のクラス) の実装を別のものに置き換えることができるようにすることです。実装を置き換えるには、次の 2 つの手順が必要です。
- SomeManagerClass を継承する DerivedSomeManagerClass クラスを定義する [プラグイン]
- デフォルト (SomeManagerClass) の代わりに新しいクラス (DerivedSomeManagerClass) を作成する [アプリケーション]
ある種のオブジェクト ファクトリが必要だと思いますが、作成するタイプは常に 1 つしかないため (既定の実装またはユーザー実装)、かなり単純なはずです。
今説明したような単純な工場を設計する方法について何か考えはありますか? 将来的にはさらに多くのクラスが存在する可能性があるため、拡張が容易になるはずです。
[*] 複数回発生してもかまいません。
編集: TheManager に含まれるオブジェクトが 3 つ以上あることに注意してください。