Я пытаюсь сделать небольшой и простой графический интерфейс на C ++ (с SDL).Я экспериментирую с составным шаблоном, чтобы иметь гибкое решение.
У меня есть класс Widget с объектами Component: например, существует PaintingComponent;если я хочу нарисовать прямоугольник, я буду использовать PaintingBoxComponent, который наследуется от PaintingComponent.
Идеальный класс Widget будет выглядеть примерно так:
Class Widget
{
private:
vector<Component*> myComponents;
public:
// A small number of methods able to communicate with the component
// without knowing their types
}
Мой вопрос прост: как лучше всего активировать этот компонент, когда он мне нужен?
Сначала я выбрал функцию «display» в классе Widget.Но я вижу две проблемы:
1 °) Я теряю чистый полиморфизм "Compoonent" в Widget, так как я вынужден объявить определенный компонент виджета как PaintingComponent.Я могу с этим справиться, так как логично, что должен отображаться виджет.
2 °) Более хлопотно, мне нужно передать информацию между моей основной программой и моим PaintingComponent.Либо я передаю экран SDL_Surface * в PaintingComponent, и он рисует нарисованное на нем изображение, либо я даю своему компоненту ссылку на объект, который должен получить нарисованное изображение (и этот объект будет рисовать изображение наэкран).В обоих случаях Widget должен будет обрабатывать данные и знать, что такое SDL_Surface *.Я теряю слабую связь, и я не хочу этого.
Затем я подумал об использовании паттерна "Посетитель", но я к этому не привык, и прежде чем пытаться его реализовать, яХотелось бы получить ваш совет.
Как бы вы поступили, чтобы иметь гибкое и надежное решение в этом случае?Заранее спасибо!