Skip to content

Latest commit

 

History

History
70 lines (51 loc) · 1.81 KB

19.迭代器模式.md

File metadata and controls

70 lines (51 loc) · 1.81 KB

迭代器模式 Iterator

  • 迭代抽象:访问一个聚合对象的内容而无需暴露它的内部实现
  • 迭代多态:为遍历不同的集合结构提供一个统一的接口,从而支持同样的算法在不同的集合结构上进行操作
  • 迭代器的健壮性考虑:遍历的同时更改迭代器所在的集合结构,会导致问题

动机

在软件构建过程中,集合对象内部结构常常变化各异,但对于这些集合对象,我们希望在不暴露其内部结构的同时,可以让外部客户代码透明的访问其中包含的元素;同时这种“透明遍历”也为“同一种算法在多种集合对象上进行操作”提供了可能。

模式定义

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

代码

template<typename T>
class Iterator{
public:
    virtual void first() = 0;
    virtual void next() = 0;
    virtual void isDone() = 0;
    virtual T& current() = 0;
};

template<typename T>
class MyCollection{
public:
    Iterator<T> GetIterator(){
        //...
    }
};

template<typename T>
class CollectionIterator : public Iterator<T>{
    MyCollection<T> mc;
public:
    CollectionIterator(const MyCollection<T>& c) : mc(c){}

    void first() override{

    }
    void next() override{

    }
    void isDone() override{

    }
    T& current() override{

    }
};

void MyAlgorithm(){
    MyCollection<int> mc;
    Iterator<int> iter = mc.GetIterator();

    for(iter.first(); !iter.isDone();iter.enxt()){
        cout << iter.current() << endl;
    }
}
  • 面向对象实现的迭代器,基于虚函数,动态绑定
  • C++使用模板实现迭代器(性能较高),静态绑定

题目