行为型模型 迭代器模式
行为型模型 迭代器模式
GOOD:提供一种方法顺序访问一个聚敛对象的各个元素,而又不暴露该对象的内部表示。
为遍历不同的聚集结构提供如开始,下一个,是否结束,当前一项等统一接口。
Iterator(迭代器接口):
该接口必须定义实现迭代功能的最小定义方法集
比如提供hasNext()和next()方法。
ConcreteIterator(迭代器实现类):
迭代器接口Iterator的实现类。可以根据具体情况加以实现。
Aggregate(容器接口):
定义基本功能以及提供类似Iterator iterator()的方法。
concreteAggregate(容器实现类):
容器接口的实现类。必须实现Iterator iterator()方法。
/** * 行为型模型 迭代器模式 * Iterator模式也叫迭代模式,是行为模式之一,它把对容器中包含的内部对象的访问委让给外部类,使用Iterator(遍历)按顺序进行遍历访问的设计模式。 * */ #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> typedef int Object; #define SIZE 5 class MyIterator { public: virtual void First() = 0; virtual void Next() = 0; virtual bool IsDone() = 0; virtual Object Currentitem() = 0; virtual ~MyIterator() {} }; class Aggregate { public: virtual Object getItem(int index) = 0; virtual MyIterator *CreateIterator() = 0; virtual int getSize() = 0; virtual ~Aggregate() {} }; class ContreteIierator: public MyIterator { public: ContreteIierator(Aggregate *ag) { _ag = ag; _idx = 0; } ~ContreteIierator() { _ag = nullptr; _idx = 0; } virtual void First() override { _idx = 0; } virtual void Next() override { if (_idx < _ag->getSize()) { _idx++; } } virtual bool IsDone() override { return (_idx == _ag->getSize()); } virtual Object Currentitem() override { return _ag->getItem(_idx); } private: int _idx; Aggregate * _ag; }; class ConcreateAggregate: public Aggregate { public: ConcreateAggregate() { for (int i = 0; i < SIZE; i++) { object[i] = i+1; } } ~ConcreateAggregate() { for (int i = 0; i < SIZE; i++) { object[i] = 0; } } virtual Object getItem(int index) override { return object[index]; } virtual MyIterator *CreateIterator() override { return new ContreteIierator(this); } virtual int getSize() override { return SIZE; } private: Object object[SIZE]; }; void mytest() { // 创建一个集合 Aggregate *ag = new ConcreateAggregate(); // 创建一个遍历这个集合的迭代器 MyIterator *it = ag->CreateIterator(); // 通过迭代器遍历集合 for (; !(it->IsDone()); it->Next()) { std::cout << it->Currentitem() << " "; } std::cout << std::endl; // 清理相关资源 delete it; delete ag; return; } int main() { mytest(); system("pause"); return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南