/*************************************************************************
迭代器模式:
提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该类内部表示

实现原理: 在迭代器中 持有 一个集合的 引用;所以通过迭代器指针,就可以访问集合
这个模式在STL中迭代器的实现原理来源于此
有的迭代进行了封装含有两个成员变量:比如在操作Map的迭代器的时候就有两个成员
iter->fisrt      iter->second
实现方法:
创建一个集合类  +  一个迭代器类
在迭代器中完成对对象的遍历     在集合中完成对对象的返回集合中的下标或者元素或者集合大小
在集合中将此类的对象中创建迭代器对象,

并将集合的地址赋值给具体的迭代器中集合(在此处完成迭代器中包含聚合对象的指针或引用)的引用
**************************************************************************/
#include <iostream>
using namespace std;
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;
};
class Aggregate
{
public:
virtual Object getItem(int index) = 0;//得到数组下标
virtual MyIterator *CreateIterator() = 0;//返回指向当前对象的指针
virtual int getSize() = 0;//返回数组大小
};
class ContreteIterator : public MyIterator
{
public:
ContreteIterator(Aggregate *ag){//在迭代器中持有集合的引用
_ag = ag;//迭代器指针指向传来的聚合类
_idx = 0;
}
~ContreteIterator(){
_ag = NULL;
_idx = 0;}
virtual void First(){//迭代器下标初始化为0
_idx = 0;}
virtual void Next(){
if (_idx <_ag->getSize())//得到创建集合的大小
{
_idx++;
}
}
virtual bool IsDone(){
return (_idx == _ag->getSize());//判断迭代器是否到末端
}
virtual Object CurrentItem(){
return _ag->getItem(_idx);//得到集合中下标为_idx的内容
}
private:
int _idx;
Aggregate *_ag;
};
class ConcreteAggregate : public Aggregate
{
public:
ConcreteAggregate()
{
for (int i = 0; i<SIZE; i++)
{
object[i] = i + 1;
}//创建一个集合赋值为1,2,3,4,5
}
virtual ~ConcreteAggregate()
{ }
virtual Object getItem(int index)
{
return object[index];//返回集合中的内容
}
virtual MyIterator *CreateIterator()
{
return new ContreteIterator(this);//将当前对象返回给迭代指针进行初始化,并使基类指针指向此对象
}
virtual int getSize()
{
return SIZE;//返回集合大小
}
private:
Object object[SIZE];
};
void main()
{
Aggregate *ag = new ConcreteAggregate(); // 创建一个集合
MyIterator *it = ag->CreateIterator();// 创建一个遍历这个集合的 迭代器
for (; !(it->IsDone()); it->Next())//通过迭代器 遍历 集合
{ cout << it->CurrentItem() << " ";}

delete it;//清理相关资源 
delete ag;
system("pause");
}

文章参考来源:传智播客--王保明

设计模式--迭代器模式(C++实现)相关推荐

  1. java设计模式迭代器模式_迭代器设计模式示例

    java设计模式迭代器模式 本文是我们名为" Java设计模式 "的学院课程的一部分. 在本课程中,您将深入研究大量的设计模式,并了解如何在Java中实现和利用它们. 您将了解模式 ...

  2. java设计模式迭代器模式_Java中的迭代器设计模式–示例教程

    java设计模式迭代器模式 迭代器模式是一种行为模式,它用于提供遍历一组对象的标准方式. Iterator模式在Java Collection Framework中得到了广泛使用,其中Iterator ...

  3. java设计模式迭代器模式_迭代器模式和Java

    java设计模式迭代器模式 大家好,在本文中,我们将检查Iterator Pattern . 我知道你们中许多人已经使用过一种设计模式,但是也许您没有意识到它是模式,或者不知道它的巨大价值. 根据&l ...

  4. java设计模式迭代器模式_Java中的迭代器设计模式

    java设计模式迭代器模式 Iterator design pattern in one of the behavioral pattern. Iterator pattern is used to ...

  5. 23种设计模式-迭代器模式《三国名将》

    对于许久不用的东西,容易忘记.百度许久,也未能找到自己所要. 从今日起,有些东西就记载下来,不仅方便自己,希望能帮到他人吧! 定义 提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部 ...

  6. [Head First设计模式]生活中学设计模式——迭代器模式

    系列文章 [Head First设计模式]山西面馆中的设计模式--装饰者模式 [Head First设计模式]山西面馆中的设计模式--观察者模式 [Head First设计模式]山西面馆中的设计模式- ...

  7. Java设计模式——迭代器模式

    概述 网上大部分人说迭代模式的时候,总是以某一种可遍历的对象为例进行介绍.这是可行的,这也是迭代模式的基本原型.当我看到<Head Frist设计模式>中迭代模式的时候,感觉要是能从另一个 ...

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

    目录 基本概念 代码与实例 基本概念 迭代器模式(Iterator):提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示. 当你需要一个聚集对象,而且不管这些对象,而不管这些对象是 ...

  9. 解读设计模式----迭代器模式(Iterator Pattern),谁才是迭代高手

    一.你在开发中使用过迭代吗?      当你在使用JavaScript开发客户端应用的时候使用过for...in吗?  1<script type="text/javascript&q ...

  10. JAVA 设计模式 迭代器模式

    用途 迭代器模式 (Iterator) 提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示. 迭代器模式是一种行为型模式. 结构 图-迭代器模式结构图 Iterator : 定义访 ...

最新文章

  1. Json文件解析(下
  2. 全球首款L4级无人车量产!李彦宏:吹过的牛实现了
  3. 《基于单幅图像的快速去雾》原理与C++复现(有一定工程意义)
  4. 利用fputc函数写一个putw(w,fp)函数,将整数w写入fp所指文件中; 利用fgetc函数写一函数getw(fp)从所指文件读出一整数
  5. wince中的hook(钩子)用法
  6. php面向对象中的魔术方法中文说明
  7. 大数据时代企业如何保障数据安全?这款工具值得一看
  8. Little Sub and Game
  9. iOS之性能优化·提高App的编译速度
  10. 联发科Helio P35处理器曝光:10GB运存
  11. UI上search 的drop down list是怎么实现的
  12. java学习(64):类访问私有内部内部类方法
  13. 【Hive】条件函数
  14. 多图片的合并(2种方式,可以设置间距)
  15. python如何实现单例模式_用Python实现设计模式——单例模式
  16. 从程序设计方法学的角度比较 SP 方法与OOP 方法
  17. 1400+款调色预设LR/PS/PR/FCPX/达芬奇lightroom滤镜LUT素材
  18. Python的index函数用法
  19. html图片显示详情,纯CSS鼠标经过图片视差弹出层显示详情链接按钮特效代码.html...
  20. python去除图片背景(透明色)

热门文章

  1. 1056 组合数的和 (15 分)—PAT (Basic Level) Practice (中文)
  2. Android 隐藏ImageView
  3. 【UOJ #351】新年的叶子(树的直径,期望)
  4. (转)栈与堆栈的区别
  5. UI控件之UITextField
  6. 没事学学docker(二):本地Centos7和阿里云服务器安装docker及其解决安装出现的问题
  7. c2065c语言错误,C语言常见错误
  8. 设计模式七大原则简述
  9. 服务器(Windows系统)自建蚂蚁(leanote)笔记超详细步骤(包含数据备份和数据还原)
  10. 关于数组越界(内存泄漏)的那点事儿(C语言)