【发布时间】:2014-02-17 11:56:44
【问题描述】:
假设我有一个类结构(简化我拥有的实际类):
class Graph
{
};
class DerivedGraph : public Graph
{
};
class DerivedGraph2 : public Graph
{
};
我想扩展这个结构来解释同一张图的不同变化。理想情况下,我希望能够执行以下操作:
class Graph
{
};
// Removed
//class DerivedGraph : public Graph
//{
//};
// Removed
//class DerivedGraph2 : public Graph
//{
//};
class DerivedGraph3 : public Graph // really just a mode of DerivedGraph
{
};
class DerivedGraph4 : public Graph // really just a second mode of DerivedGraph
{
};
class DerivedGraph5 : public Graph // really just a mode of DerivedGraph2
{
};
class DerivedGraph6 : public Graph // really just a second mode of DerivedGraph2
{
};
但是您可以很快看到这里的问题——我不得不在这里创建太多的类。此外,基类非常复杂且庞大(底线是它简直糟透了)......所以我不想做太多的结构改变。我想要在图形本身级别定义事物的灵活性,但同时具有为一种图形类型的特定模式定义事物的灵活性。我希望能够使用虚拟函数,例如 DoesGraphSupportNormalizedData() 或类似的东西(这只是一个简单的例子)。然后每个类都会覆盖这个方法。
我的另一个想法是为模式本身创建一个单独的类结构(Graph 类将创建它的一个实例),例如:
class BaseMode
{
};
class Mode1 : public BaseMode
{
};
class Mode2 : public BaseMode
{
};
现在的问题是这些模式类需要访问 Graph 类中的几条数据......我真的不想传递所有这些信息。模式类将变得同样无用并且根本不灵活。我只是想不出一个干净的方法来处理这个问题。我能想到的最好的办法是让模式类做它可以做的事情,而不必向它传递各种废话,但现在界面只是愚蠢和尴尬。有什么想法吗?
【问题讨论】:
-
我很困惑。你所描述的只是尖叫“使用继承”。如果不了解模式的实际实现,恐怕很难提供帮助。