Интересный вопрос возник, все никак не родить решения...
Есть иерархия классов (чисто в теории)
class Shape //базовый
{
virtual void Move(double dt) = 0;
virtual void Draw(HDC dc) const = 0;
virtual ~Shape();
// другие методы
};
class SomeShape : public Shape
{
void Move(double dt) { /*...*/ }
void Draw(HDC dc) { /*...*/ }
};
class OtherShape : public Shape
{
void Move(double dt) { /*...*/ }
void Draw(HDC dc) { /*...*/ }
};
Хотелось бы вынести отделить отрисовку. То есть вынести детали реализации Draw наружу. Также хочется оставить за собой возможность абстрагироваться от HDC и поддерживать отрисовку не только на нем, но и, скажем, на поверхностях DirectX и в GDI+.
Думается, что реализации Draw должны располагаться в отдельных иерархиях, но быть в то же время привязанными к основной иерархии.
Пример надуманный, но зато довольно наглядный. Чувствую, паттерны должны помочь; но какой/какие из них?

... << RSDN@Home 1.1.4 stable SR1 rev. 568>>