【发布时间】:2016-09-15 19:17:02
【问题描述】:
我必须遍历周长矩形的特定点(在某些情况下,我需要遍历此矩形的一条线,在其他情况下,我需要遍历整个矩形)。我有一个接口 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 上的线类型。
【问题讨论】:
-
你错过了你有两个垂直和两个水平边缘。
-
可能是 codereview.stackexchange.com ?
标签: c++ oop iterator single-responsibility-principle