C++设计模式---迭代器模式

1、介绍

        迭代器模式是⼀种行为型设计模式,是⼀种使⽤频率⾮常⾼的设计模式,在各个语⾔中都有应用,其主要⽬的是提供⼀种统⼀的⽅式来访问⼀个聚合对象中的各个元素,而不需要暴露该对象的内部表示。通过迭代器,客户端可以顺序访问聚合对象的元素,而无需了解底层数据结构。

        迭代器模式应⽤⼴泛,但是⼤多数语⾔都已经内置了迭代器接⼝,不需要⾃⼰实现。

包含一下几个部分:

        (1)迭代器接口Iterator :定义访问和遍历元素的接⼝, 通常会包括hasNext() ⽅法⽤于检查是否还有下⼀个元素,以及next() ⽅法⽤于获取下⼀个元素。有的还会实现获取第⼀个元素以及获取当前元素的⽅法。
        (2)具体迭代器ConcreateIterator :实现迭代器接⼝,实现遍历逻辑对聚合对象进⾏遍历。
        (3)抽象聚合类:定义了创建迭代器的接⼝,包括⼀个createIterator ⽅法⽤于创建⼀个迭代器对象。
        (4)具体聚合类:实现在抽象聚合类中声明的createIterator() ⽅法,返回⼀个与具体聚合对应的具体迭代器。

2、示例

#include 
#include 

// 抽象迭代器类
class Iterator {
public:
    virtual void First() = 0;
    virtual void Next() = 0;
    virtual bool IsDone() = 0;
    virtual int CurrentItem() = 0;
};

// 具体迭代器类,用于遍历整数向量
class ConcreteIterator : public Iterator {
private:
    std::vector *vec;
    int current;

public:
    ConcreteIterator(std::vector *v) : vec(v), current(0) {}

    void First() override {
        current = 0;
    }

    void Next() override {
        if (current <= vec->size() - 1) {
            current++;
        }
    }

    bool IsDone() override {
        return current >= vec->size();
    }

    int CurrentItem() override {
        return (*vec)[current];
    }
};

// 聚合类
class Aggregate {
public:
    virtual Iterator *CreateIterator() = 0;
};

// 具体聚合类,即整数向量
class ConcreteAggregate : public Aggregate {
private:
    std::vector items;

public:
    ConcreteAggregate() {
        items = {1, 2, 3, 4, 5};
    }

    Iterator *CreateIterator() override {
        return new ConcreteIterator(&items);
    }
};

int main() {
    ConcreteAggregate aggregate;
    Iterator *iterator = aggregate.CreateIterator();

    for (iterator->First(); !iterator->IsDone(); iterator->Next()) {
        std::cout << iterator->CurrentItem() << " ";
    }
    std::cout << std::endl;

    delete iterator;

    return 0;
}

结果:

1 2 3 4 5

你可能感兴趣的:(设计模式,设计模式,迭代器模式)