← 返回博客列表

模式特点

提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。

类图

类图

应用场景

示例代码(C++)

// 抽象迭代器
template<typename T>
class Iterator {
public: virtual bool hasNext() = 0; virtual T next() = 0;
          virtual ~Iterator() = default; };

// 轨迹点集合
class Trajectory {
    std::vector<std::pair<double, double>> m_points;
public:
    void addPoint(double x, double y) { m_points.push_back({x, y}); }

    // 内部迭代器
    class TrajIterator : public Iterator<std::pair<double,double>> {
        Trajectory& m_traj; size_t m_idx = 0;
    public:
        TrajIterator(Trajectory& t) : m_traj(t) {}
        bool hasNext() override { return m_idx < m_traj.m_points.size(); }
        std::pair<double,double> next() override { return m_traj.m_points[m_idx++]; }
    };

    TrajIterator* createIterator() { return new TrajIterator(*this); }
};

Trajectory traj;
traj.addPoint(0, 0); traj.addPoint(100, 200); traj.addPoint(50, 300);

// 使用迭代器遍历,不暴露内部 vector
auto* it = traj.createIterator();
while (it->hasNext()) {
    auto [x, y] = it->next();
    std::cout << "点(" << x << "," << y << ")" << std::endl;
}