Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1436555
  • 博文数量: 241
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 2253
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-11 22:27
个人简介

--

文章分类

全部博文(241)

文章存档

2021年(3)

2019年(6)

2018年(1)

2017年(9)

2016年(21)

2015年(50)

2014年(125)

2013年(26)

我的朋友

分类: C/C++

2014-02-25 12:54:08

1、是什么?
    迭代器模式,提供一种方法顺序访问一个聚合对象中各元素,而不暴露该对象内部表示。

2、为什么?何时?
    当需要访问一个聚集对象,而且不管这些对象是什么都需要遍历的时候,就应该考虑使用迭代器模式。

3、怎么用?


4、示例代码

点击(此处)折叠或打开

  1. #include <iostream>

  2. using namespace std;

  3. class Iterator
  4. {
  5. public:
  6.     virtual void first() = 0;
  7.     virtual void next() = 0;
  8.     virtual bool isTail() = 0;
  9.     virtual int current() = 0;

  10. };
  11. class Aggregate
  12. {
  13. public:
  14.     virtual Iterator* CreateIterator() = 0;
  15.     virtual int getItem(int num) = 0;
  16.     virtual int getSize() = 0;
  17. };
  18. class ConCreteIterator : public Iterator
  19. {
  20. public:
  21.     ConCreteIterator()
  22.     {
  23.     }
  24.     ConCreteIterator(Aggregate* agg)
  25.     {
  26.         pAgg = agg;
  27.         index = 0;
  28.     }
  29.     void first()
  30.     {
  31.         index = 0;
  32.     }
  33.     void next()
  34.     {
  35.         if (index < pAgg->getSize())
  36.         {
  37.             index ++;
  38.         }
  39.     }
  40.     bool isTail()
  41.     {
  42.         bool rt = (index == pAgg->getSize()-1);
  43.         return rt;
  44.     }
  45.     int current()
  46.     {
  47.         if (index < pAgg->getSize()-1)
  48.         {
  49.             return pAgg->getItem(index);
  50.         }
  51.         return -1;
  52.     }
  53. private:
  54.     Aggregate* pAgg;
  55.     int index;
  56. };

  57. class ConcreteAggregate : public Aggregate
  58. {
  59. public:
  60.     enum{SIZE = 3};
  61.     ConcreteAggregate()
  62.     {
  63.         int i;
  64.         for (i = 0; i < SIZE; i++)
  65.         {
  66.             data[i] = i;
  67.         }
  68.     }
  69.     Iterator* CreateIterator()
  70.     {
  71.         return new ConCreteIterator();
  72.     }
  73.     int getItem(int num)
  74.     {
  75.         if (num < SIZE && num >= 0)
  76.         {
  77.             return data[num];
  78.         }
  79.         return -1;
  80.     }
  81.     int getSize()
  82.     {
  83.         return SIZE;
  84.     }
  85. private:
  86.     int data[SIZE];
  87. };

  88. void main()
  89. {
  90.     cout<<"hello world\n";

  91.     Aggregate* agg = new ConcreteAggregate();
  92.     Iterator* itr = new ConCreteIterator(agg);
  93.     for ( ; !(itr->isTail()); itr->next())
  94.     {
  95.         cout<<itr->current()<<endl;
  96.     }
  97. }
阅读(505) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~