我试着在C++中使用一个简单的GUI(带有SDL)。我正在试验复合模式以获得灵活的解决方案。
我有一个带有组件对象的widget类:例如,有一个paintingcomponent;如果我想绘制一个框,我将使用一个paintingboxcomponent,它继承了paintingcomponent。
理想的小部件类看起来有点像这样:
Class Widget
{
private:
vector<Component*> myComponents;
public:
// A small number of methods able to communicate with the component
// without knowing their types
}
我的问题很简单:当我需要这个组件时,激活它的最佳方法是什么?
我首先在widget类中使用了一个“display”函数。但我看到两个问题:
1°)我失去了widget中“component”的纯粹多态性,因为我被迫将widget的特定组件声明为paintingcomponent。我可以处理这个问题,因为显示小部件是合乎逻辑的。
更麻烦的是,我需要在主程序和绘制组件之间传递信息。或者我将SDL_Surface*屏幕传递给绘制组件,然后绘制它在其上绘制的图像,或者我将引用需要接收其绘制的图像的对象(此对象将在屏幕上绘制图像)。在这两种情况下,小部件都必须处理数据,并且必须知道SDL图面是什么。我松了,我不想这样。
然后,我考虑使用“访问者”模式,但我不习惯,在尝试实现它之前,我想征求您的建议。
在这种情况下,您将如何获得一个灵活而坚实的解决方案?事先谢谢!