作成するクラスから継承する個別の作成者クラスを使用して構築された、いくつかの複雑なクラスがあります。
一例として、順序付けされていないデータから作成されたグラフが考えられます。
class Graph{
//....
public:
void showData();
protected:
std::vector<std::pair<int,int> > mConnectedData;
}
class GraphCreator:private Graph{
public:
//...
void construct();
private:
std::map<double,int> mSomeHelperContainer;
//...
}
構築には、多くのヘルパー関数と、別のクラス GraphCreator に入れるヘルパー データが必要です。グラフ関連の関数も多く必要で、いずれにしてもグラフのデータが必要なのでプライベート継承を利用しています。これは決して有名な is-a 関係ではなく、プライベートな継承は一般に悪い設計のヒントと考えられているため、いくつか疑問があります: これは良いアイデアであり、ファクトリを設計する適切な方法の 1 つなのか、それとも大きな欠点があるのでしょうか。考えたことがない?そのような工場を設計するより良い方法は何でしょうか?
編集:
これまでの回答に感謝します! 現在使用されているアプローチの理由をより明確にするための追加情報。私は静的な作成方法を使用できません (Creator の状態変数が多すぎる)。別の制約があります。作成者から独立したグラフを (たとえば、ファイルからの読み取り方法と一緒に) ライブラリで他の人に提供したいのです。それらは作成者を気にする必要はありません。したがって、Graph クラス内にコードを追加するため、友人の使用についても少し確信が持てません。