假設我有一個類結構等(簡化了實際的類我有)的不同排列:創建類來表示一個類型
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類的幾條數據......我真的不想傳遞所有這些信息。模式類將變得毫無用處,並且根本不會靈活。我只是想不出一個乾淨的方式來處理這個問題。我能想到的最好的方式就是讓模式類別盡其所能,而不必將各種垃圾傳遞給它,但現在界面只是愚蠢而尷尬。有任何想法嗎?
我很困惑。你所描述的只是尖叫「使用繼承」。恐怕不知道更多關於模式的實際執行情況,這很難提供幫助。 – pmr