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