【发布时间】:2012-06-05 12:44:03
【问题描述】:
我有几个复杂的类,它们是使用从要创建的类继承的独立创建者类构建的。
一个例子可能是由无序数据构成的图表。
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 关系,而且由于私有继承通常被认为是不良设计的暗示,我有一些疑问: 这是一个好主意和设计工厂的一种适当方式,还是有一些我没有想到的主要缺点? 设计这样一个工厂的更好方法是什么?
编辑:
感谢到目前为止的回答! 一些额外的信息,使当前使用的方法的原因更清楚。 我不能使用静态创建方法(Creator 中的状态变量太多)并且我有另一个约束: 我想在库中向其他人提供独立于创建者的图表(例如,连同从文件中读取的方法)。 那些不应该关心创造者。因此我也有点不确定朋友的使用情况,因为它在 Graph 类中添加了代码。
【问题讨论】:
-
你说得对,这闻起来像糟糕的设计。如果您发布更多代码(使用继承的东西),我们可以建议替代方案。
-
这里是构建器模式的一个很好的例子,以防它帮助en.wikipedia.org/wiki/Builder_pattern
-
为 Graph 提供一个公共接口以始终如一地从外部构建它,而我们让 GraphCreator 来完成这项工作有什么不好?
-
@user331471:从头开始构建图表的信息在包含图表的库中不可用(代码太多,依赖项太多等)。为构建图形而提供的唯一接口是文件阅读器。
标签: c++ design-patterns factory builder