美文网首页我爱编程
行为模式9-迭代器模式

行为模式9-迭代器模式

作者: sunblog | 来源:发表于2018-04-16 23:16 被阅读0次

行为模式9-迭代器模式

迭代器模式 Iterator

意图

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

问题思考

二叉树的先序、中序、后序遍历

适用性

  • 访问一个聚合对象的内容而无需暴露它的内部表示。
  • 支持对聚合对象的多重遍历。
  • 为遍历不同的聚合结构提供一个统一的接口(即,支持多态迭代)

效果

  • 它支持以不同的方式遍历一个聚合
  • 迭代器简化了聚合的接口

类图

iterator

实现

template<typename Item>
class Iterator {
public:
    virtual bool HasNext() = 0;

    virtual Item *Next() = 0;
};

class Aggregate {
public:
    virtual Iterator *CreateIterator() = 0;
};

template<typename Item>
class ConcreteIterator : public Iterator<Item> {
public:
    explicit ConcreteIterator(const std::vector<Item > &vector) {
        mItemVec = vector;
    }

    bool HasNext() override {
        return idx <= mItemVec.size() - 1;
    }

    Item *Next() override {
        return mItemVec[idx++];
    }

private:
    std::vector<Item > mItemVec;
    int idx = 0;
};

class ConcreteAggregate : public Aggregate {
public:
    Iterator<int> *CreateIterator() override {
        return new ConcreteIterator<int>(mDataVector);
    }

private:
    std::vector<int> mDataVector;
};

注意:注意CreateIterator是调用的new,c++下,要注意内存的释放。有一种方式是放到shared_ptr中。

相关文章

网友评论

    本文标题:行为模式9-迭代器模式

    本文链接:https://www.haomeiwen.com/subject/anpykftx.html