Método de interface estranho para o Iterator de ponto
Eu preciso iterar sobre pontos específicos do retângulo de perímetro (em alguns casos, eu preciso iterar sobre uma linha desse retângulo; em outros casos, eu preciso iterar sobre todo o retângulo). Eu tenho uma interface PointIterator.
struct Point
{
double x,y
}
class PointIteratorI
{
virtual void next() =0;
virtual void isOver() =0;
virtual Point& getPoint() = 0;
}
no caso de iterar sobre uma linha
class LineIterator:public PointIterator
{
....
}
no caso de iterar sobre o perímetro do retângulo
class PerimeterIterator:public PointIterator
{
....
}
No caso do LineIterator, também preciso do tipo de linha (horizontal ou vertical, o retângulo possui 2 linhas horizontais e 2 linhas verticais). Mas uma interface como "getLineType" é estranha para o tipo LineIterator. Parece que este método não é para esta classe. Como nesse caso, a classe LineIterator será responsável pela iteração e direção. Está quebrando o princípio de responsabilidade única.
Eu pensei em diferentes interfaces como:
class LineObjectI
{
public:
virtual LineType getLineType() = 0;
.....
}
class LineIterator:public PointIterator, public LineObjectI
{
protected:
virtual LineType getLineType() = 0;
....
}
por ocultar essa interface. Quero saber se existe uma maneira melhor de verificar o tipo de linha no LineIterator.