我爱编程

行为模式9-迭代器模式

2018-04-16  本文已影响0人  sunblog

行为模式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中。

上一篇下一篇

猜你喜欢

热点阅读