Метод странного интерфейса для точечного итератора
Я должен перебирать определенные точки прямоугольника по периметру (в некоторых случаях мне нужно перебирать одну строку этого прямоугольника, в других случаях мне нужно перебирать весь прямоугольник). У меня есть интерфейс PointIterator.
struct Point
{
double x,y
}
class PointIteratorI
{
virtual void next() =0;
virtual void isOver() =0;
virtual Point& getPoint() = 0;
}
в случае итерации по одной строке
class LineIterator:public PointIterator
{
....
}
в случае итерации по периметру прямоугольника
class PerimeterIterator:public PointIterator
{
....
}
В случае LineIterator мне также нужен тип линии (горизонтальная или вертикальная, прямоугольник имеет 2 горизонтальные и 2 вертикальные линии). Но интерфейс типа "getLineType" является странным для типа LineIterator. Кажется, что этот метод не для этого класса. Потому что в таком случае класс LineIterator будет отвечать за итерацию и направление. Это нарушает принцип единой ответственности.
Я думал для другого интерфейса как
class LineObjectI
{
public:
virtual LineType getLineType() = 0;
.....
}
class LineIterator:public PointIterator, public LineObjectI
{
protected:
virtual LineType getLineType() = 0;
....
}
для сокрытия этого интерфейса. Я хочу знать, есть ли лучший способ проверить тип линии на LineIterator.