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

本文通过C++代码实例展示了迭代器模式的基本应用,实现了一个简单的名字仓库类和迭代器类,用于遍历名字集合。尽管C++标准库已提供迭代器,但此例有助于理解设计模式原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、源代码:

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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值