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

一、源代码:

#include<iostream>
#include<memory>
#include<vector>

using namespace std;

class Iterator
{
public:
    virtual bool hasNext(const vector<string>& names) = 0;
    virtual string next(const vector<string>& names) = 0;
    virtual ~Iterator() = default;
};

class Container
{
public:
    virtual shared_ptr<Iterator> getIterator() = 0;
    virtual ~Container() = default;
};

class NameIterator:public Iterator
{
public:
    NameIterator()
    {
        _index = 0;
    }
    virtual bool hasNext(const vector<string>& names) override
    {
        if(names.empty())
            return false;
        else if(_index<names.size())
            return true;
        else
            return false;
    }
    virtual string next(const vector<string>& names) override
    {
        if(this->hasNext(names))
            return names[_index++];
        else
            return "";
    }
private:
    unsigned int _index;
};

class NameRepository:public Container
{
public:
    NameRepository()
    {
        _names = {"Robert","John","Julie","Lora"};
    }
    virtual shared_ptr<Iterator> getIterator() override
    {
        return make_shared<NameIterator>();
    }
    vector<string> getReository()
    {
        return _names;
    }
private:
    vector<string> _names;
};

int main()
{
    shared_ptr<NameRepository> namesRepository = make_shared<NameRepository>();
    for(shared_ptr<Iterator> iter= namesRepository->getIterator();iter->hasNext(namesRepository->getReository());)
    {
        string name = iter->next(namesRepository->getReository());
        cout<<"Names: "<<name<<endl;
    }
}

二、运行结果:

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

三、点评:

C++中STL自带迭代器,利用范围for语句也可以达到效果,所以本篇实在很烂,把简单的操作复杂化,为了设计模式凑数,当作反面教材