博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
行为型模型 迭代器模式
阅读量:6195 次
发布时间:2019-06-21

本文共 2419 字,大约阅读时间需要 8 分钟。

行为型模型 迭代器模式

 

 GOOD:提供一种方法顺序访问一个聚敛对象的各个元素,而又不暴露该对象的内部表示。 

为遍历不同的聚集结构提供如开始,下一个,是否结束,当前一项等统一接口。

 

 

 

Iterator(迭代器接口):

        该接口必须定义实现迭代功能的最小定义方法集
        比如提供hasNext()和next()方法。
ConcreteIterator(迭代器实现类):
        迭代器接口Iterator的实现类。可以根据具体情况加以实现。
Aggregate(容器接口):
        定义基本功能以及提供类似Iterator iterator()的方法。
concreteAggregate(容器实现类):
        容器接口的实现类。必须实现Iterator iterator()方法。

 

/** * 行为型模型 迭代器模式 * Iterator模式也叫迭代模式,是行为模式之一,它把对容器中包含的内部对象的访问委让给外部类,使用Iterator(遍历)按顺序进行遍历访问的设计模式。 * */#define _CRT_SECURE_NO_WARNINGS#include 
#include
typedef int Object;#define SIZE 5class 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;}

 

转载地址:http://nquca.baihongyu.com/

你可能感兴趣的文章
Mysql错误问题记录
查看>>
PHP学习笔记(3)-Zend Studio安装和汉化
查看>>
Api程序接口对接
查看>>
科技的继续发展会带给我们什么?
查看>>
开源方案搭建可离线的精美矢量切片地图服务-5.Mapbox离线项目实现
查看>>
SQLite的时候判断语句是否纯在:出现RuntimeException
查看>>
C语言笔记
查看>>
ajax实例1
查看>>
js学习篇--数组按升序降序排列
查看>>
MyBatis笔记——Mapper动态代理
查看>>
ElasticSearch入门及核心概念介绍
查看>>
VC++2010开发数字图像系统1
查看>>
表达式求值
查看>>
使用PPRevealSideViewController创建抽屉式导航
查看>>
算法踩坑小记
查看>>
网关地址设置
查看>>
一个动画 Label (走马观花)
查看>>
requests 中文乱码
查看>>
VMware下ubuntu与Windows实现文件共享的方法(zhuan)
查看>>
再见了Server对象,拥抱IHostingEnvironment服务对象(.net core)
查看>>