设计模式--迭代器模式C++实现

迭代器模式C++实现

1定义

他提供一种方法访问一个容器对象中的各个元素,而不暴漏该对象内部细节

注:迭代器是为容器服务的。迭代器模式提供了遍历容器的方便性,容器只管理增减元素就好,需要遍历时交给迭代器就好。

2类图

角色分析

Iterator抽象迭代,定义访问和遍历元素的接口,一般都是固定接口:first,next,IsDone/last

ConcreteIterator具体迭代器,实现迭代器接口,完成容器元素的遍历

Aggregate抽象容器,负责提供具体迭代器角色的接口,必然提供一个CreateIterator的方法。

ConcreteAggregate具体容器,实现接口定义的方法,创建出容纳迭代器的对象

3实现

class Iterator;
typedef int Object;
class Interator;
class Aggregate
{
public:
  virtual ~Aggregate();
  virtual Iterator* CreateIterator() = 0;
  virtual Object GetItem(int idx) = 0;
  virtual int GetSize() = 0;
protected:
  Aggregate();
private:
};

class ConcreteAggregate:public Aggregate
{
public:
  enum {SIZE = 3};
  ConcreteAggregate();
  ~ConcreteAggregate();
  Iterator* CreateIterator();
  Object GetItem(int idx);
  int GetSize();
protected:

private:
  Object _objs[SIZE];
};

#include <iostream>
using namespace std;
Aggregate::Aggregate()
{
}
Aggregate::~Aggregate()
{
}
ConcreteAggregate::ConcreteAggregate()
{
  for (int i = 0; i < SIZE; i++)
  _objs[i] = i;
}
ConcreteAggregate::~ConcreteAggregate()
{
}
Iterator* ConcreteAggregate::CreateIterator()
{
  return new ConcreteIterator(this);
}
Object ConcreteAggregate::GetItem(int idx)
{
  if (idx < this->GetSize())
  return _objs[idx];
else

  return -1;

}
int ConcreteAggregate::GetSize()
{
  return SIZE;
}

class Aggregate;
typedef int Object;
class Iterator
{
public:
  virtual ~Iterator();
  virtual void First() = 0;
  virtual void Next() = 0;
  virtual bool IsDone() = 0;
  virtual Object CurrentItem() = 0;
protected:
  Iterator();
private:
};
class ConcreteIterator:public Iterator
{
public:
  ConcreteIterator(Aggregate* ag , int idx = 0);
  ~ConcreteIterator();
  void First();

  void Next();
  bool IsDone();
  Object CurrentItem();
protected:
private:
  Aggregate* _ag;
  int _idx;
};

Iterator::Iterator()
{
}
Iterator::~Iterator()
{
}
ConcreteIterator::ConcreteIterator(Aggregate* ag , int idx)
{
  this->_ag = ag;
  this->_idx = idx;
}
ConcreteIterator::~ConcreteIterator()
{
}

Object ConcreteIterator::CurrentItem()
{
  return _ag->GetItem(_idx);
}
void ConcreteIterator::First()
{
  _idx = 0;
}
void ConcreteIterator::Next()
{
  if (_idx < _ag->GetSize())
  _idx++;
}
bool ConcreteIterator::IsDone()
{
  return (_idx == _ag->GetSize());
}

时间: 2025-01-06 03:46:45

设计模式--迭代器模式C++实现的相关文章

设计模式 - 迭代器模式(iterator pattern) Java 迭代器(Iterator) 详解

迭代器模式(iterator pattern) Java 迭代器(Iterator) 详解 本文地址: http://blog.csdn.net/caroline_wendy 参考迭代器模式(iterator pattern): http://blog.csdn.net/caroline_wendy/article/details/35254643 Java的标准库(util)中包含迭代器接口(iterator interface), import java.util.Iterator; 继承(

设计模式 - 迭代器模式(iterator pattern) 详解

迭代器模式(iterator pattern) 详解 本文地址: http://blog.csdn.net/caroline_wendy 迭代器模式(iterator pattern) : 提供一种方法顺序访问一个聚合对象中的各个元素, 而又不暴露其内部的表示; 建立迭代器接口(iterator interface), 包含hasNext()方法和next()方法; 不同聚合对象的具体的迭代器(concrete iterator), 继承(implements)迭代器接口(iterator in

设计模式 - 迭代器模式(iterator pattern) 扩展 详解

迭代器模式(iterator pattern) 扩展 详解 本文地址: http://blog.csdn.net/caroline_wendy 参考迭代器模式-Java迭代器: http://blog.csdn.net/caroline_wendy/article/details/35268931 扩展迭代器模式, 添加一个Hashtable存储的类. 具体方法: 1. Hashtable的类, 包含创建value()的迭代器(iterator). /** * @time 2014年6月27日

【C#设计模式-迭代器模式】

一.概述:迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示. 二.适用性: 访问一个聚合对象的内容而无需暴露它的内部表示 支持对聚合对象的多种遍历 为遍历不同的聚合结构提供一个统一的接口 三.结构: 迭代器角色(Iterator):迭代器角色负责定义访问和遍历元素的接口 具体迭代器角色(Concrete Iteraror):具体迭代器角色实现了迭代器接口,并需要记录遍历中的当前位置. 聚合角色(Aggregate):聚合角色负责定义获得迭代

19. 星际争霸之php设计模式--迭代器模式

题记==============================================================================本php设计模式专辑来源于博客(jymoz.com),现在已经访问不了了,这一系列文章是我找了很久才找到完整的,感谢作者jymoz的辛苦付出哦! 本文地址:http://www.cnblogs.com/davidhhuan/p/4248206.html============================================

JavaScript设计模式 - 迭代器模式

迭代器模式是指提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示. 迭代器模式可以把迭代的过程从业务逻辑中分离出来,在使用迭代器模式之后,即使不关心对象的内部构造,也可以按顺序访问其中的每个元素 许多浏览器都支持 Javascript 的 Array.prototype.forEach 迭代器可以分为 内部迭代器 和 外部迭代器 一.jQuery 中的迭代器 1 $.each( [1,2,3,4], function (i, n) { 2 console.log( "当

PHP设计模式——迭代器模式

声明:本系列博客参考资料<大话设计模式>,作者程杰. 迭代器模式:迭代器模式是遍历集合的成熟模式,迭代器模式的关键是将遍历集合的任务交给一个叫做迭代器的对象,它的工作时遍历并选择序列中的对象,而客户端程序员不必知道或关心该集合序列底层的结构. UML类图: 角色: Iterator(迭代器):迭代器定义访问和遍历元素的接口 ConcreteIterator(具体迭代器):具体迭代器实现迭代器接口,对该聚合遍历时跟踪当前位置 Aggregate (聚合):聚合定义创建相应迭代器对象的接口(可选)

设计模式-迭代器模式(Iterator Pattern)

本文由@呆代待殆原创,转载请注明出处:http://www.cnblogs.com/coffeeSS/ 迭代器模式简介 迭代器相信大部分人都不陌生,java/c++等很多编程语言的容器类都支持迭代器操作,这个模式就是介绍迭代器实现的细节. 迭代器模式的定义和基本结构 定义:提供一个可以顺序访问一个聚合对象中的各个元素有不暴露器内部实现的方法. 一张来自<Head First>的结构图. client:调用Iterator对ConcreteAggregate内的元素进行迭代而不需要关系Concr

设计模式 --迭代器模式(Iterator)

能够游走于聚合内的每一个元素,同时还可以提供多种不同的遍历方式. 基本概念: 就是提供一种方法顺序访问一个聚合对象中的各个元素,而不是暴露其内部的表示. 使用迭代器模式的优点: 遍历集合或者数组: 忽略集合和数组的结构: 提供不同的遍历方式: 符合单一职责原则. 迭代器角色: 抽象迭代器:该接口必须定义实现迭代功能的最小定义方法集. 具体迭代器:迭代器接口Iterator的实现类.可以根据具体情况加以实现. 抽象聚合类:定义基本功能以及提供类似Iterator iterator()的方法. 具体

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

概述 网上大部分人说迭代模式的时候,总是以某一种可遍历的对象为例进行介绍.这是可行的,这也是迭代模式的基本原型.当我看到<Head Frist设计模式>中迭代模式的时候,感觉要是能从另一个角度来说明,可能更能够体现迭代模式的威力所在. 本文介绍的这种迭代模式,倒是更像是适配器-迭代器模式.希望于你有益~ 版权说明 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:Coding-Naga发表日期: 2016年3月4日链接:http://blog.csdn.net/lemo