美文网首页我爱编程
行为模式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