Iterator模式(C++迭代器模式)

基本上来说,Iterator模式并没有什么可多说得,在STL中见得实在太多了,一般用于遍历数据结构,其实现也相对简单。

代码如下:

//////////////////////////////////////////////////////////////////////////
// author: Jeson Yang
//date:2014.12.10
//file:main.cpp
//////////////////////////////////////////////////////////////////////////
#include <iostream>
using namespace std;
class Interator;
class Aggregate
{
public:
	virtual ~Aggregate(){}
	virtual Interator* CreateItrator()=0{};
	virtual int GetSize()=0{}
	virtual int GetItem(int index)=0{}
protected:
	Aggregate(){}
};

class ConcreteAggregate:public Aggregate
{
public:
	enum{size=3};
	ConcreteAggregate()
	{
		for(int i=0;i < size;i++)
			m_obj[i]=i;
	}
	~ConcreteAggregate(){}
	Interator* CreateItrator();
	int GetItem(int index)
	{
		if(GetSize()) return m_obj[index];
		else return -1;
	}
	int GetSize(){return size;}
private:
	int m_obj[size];
};

class Interator
{
public:
	virtual ~Interator(){};
	virtual void First()=0;
	virtual void Next()=0;
	virtual bool IsDone()=0;
	virtual int CurrentItem()=0;
protected:
	Interator(){}
};

class ConcreteInterator:public Interator
{
public:
	ConcreteInterator(Aggregate* ag,int index=0)
	{m_ag=ag;m_index=index;}
	~ConcreteInterator(){}
	void First(){m_index=0;}
	void Next()
	{
		if(m_index != m_ag->GetSize()) m_index++;
	}
	bool IsDone(){return(m_index==m_ag->GetSize());}
	int CurrentItem(){return m_ag->GetItem(m_index);}
private:
	Aggregate* m_ag;
	int m_index;
};

Interator* ConcreteAggregate::CreateItrator()
{
	return new ConcreteInterator(this);
}

void main()
{
	Aggregate* ag=new ConcreteAggregate();
	Interator* it=new ConcreteInterator(ag);
	for(;!(it->IsDone());it->Next())
	{
		cout<<it->CurrentItem()<<endl;
	}

	delete it;
	delete ag;
}
时间: 2024-10-04 04:27:34

Iterator模式(C++迭代器模式)的相关文章

Java进阶篇设计模式之九----- 解释器模式和迭代器模式

前言 在上一篇中我们学习了行为型模式的责任链模式(Chain of Responsibility Pattern)和命令模式(Command Pattern).本篇则来学习下行为型模式的两个模式, 解释器模式(Interpreter Pattern)和迭代器模式(Iterator Pattern). 解释器模式 简介 解释器模式顾名思义,就是对某事物进行解释.给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器.客户端可以使用这个解释器来解释这个语言中的句子. 解释器模式

行为型模式之迭代器模式

概述 在软件开发中,我们经常需要使用聚合对象来存储一系列数据.聚合对象拥有两个职责:一是存储数据:二是遍历数据.从依赖性来看,前者是聚合对象的基本职责:而后者既是可变化的,又是可分离的.因此,可以将遍历数据的行为从聚合对象中分离出来,封装在一个被称之为“迭代器”的对象中,由迭代器来提供遍历聚合对象内部数据的行为,这将简化聚合对象的设计,更符合“单一职责原则”的要求. 定义 迭代器模式(Iterator Pattern):提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示,其别名为游标(Cu

行为模式之迭代器模式

迭代器模式(Iterator Pattern)是最常被使用的几个模式之一,被广泛地应用到Java的API中. 定义:提供一种方法访问一个容器对象中各个元素,而又不需暴露该对象的内部细节. 类图如下所示. 迭代器模式有以下4个角色. 抽象迭代器(Iterator)角色:负责定义访问和遍历元素的接口. 具体迭代器(Concrete Iterator)角色:实现Iterator接口,完成容器元素的遍历. 抽象聚集(Aggregate)角色:提供创建迭代器角色的接口. 具体聚集(Concrete Agg

25行为型模式之迭代器模式

概念 Iterator模式也叫迭代模式,是行为模式之一,它把对容器中包含的内部对象的访问委让给外部类,使用Iterator(遍历)按顺序进行遍历访问的设计模式. 在应用Iterator模式之前,首先应该明白Iterator模式用来解决什么问题.或者说,如果不使用Iterator模式,会存在什么问题. 1.由容器自己实现顺序遍历.直接在容器类里直接添加顺序遍历方法 2.让调用者自己实现遍历.直接暴露数据细节给外部. 以上方法1与方法2都可以实现对遍历,这样有问题呢? 1,容器类承担了太多功能:一方

设计模式——行为型模式之迭代器模式(八)

迭代器模式 迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式.这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示. 迭代器模式属于行为型模式. 介绍 意图:提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示. 主要解决:不同的方式来遍历整个整合对象. 何时使用:遍历一个聚合对象. 如何解决:把在元素之间游走的责任交给迭代器,而不是聚合对象. 关键代码:定义接口:hasNext, next. 应用实例:JA

JavaScript---设计模式之迭代器模式

迭代器模式提供一种方法顺序访问一个聚合对象中各个元素,而又不需要暴露该方法中的内部表示. jQuery中我们经常会用到一个each函数就是迭代器模式 作用 为遍历不同的集合结构提供一个统一的接口,从而支持同样的算法在不同的集合结构上进行操作 对于集合内部结果常常变化各异,我们不想暴露其内部结构的话,但又想让客户代码透明的访问其中的元素,这种情况下我们可以使用迭代器模式. 注意事项 一般的迭代,我们至少要有2个方法,hasNext和Next,这样才做到遍历所有对象. 遍历的同时更改迭代器所在的集合

设计模式5(命令模式,迭代器模式)

命令模式 本质是封闭请求,其关键是把请求封闭成对象,也就是命令对象,并定义了统一的执行操作的接口,这个命令可以存储.转发.记录.处理.撤消等.整个命令模式都是围绕这个对象进行. 命令模式       组合模式 宏命令的功能可以使用组合模式     备忘录模式   可以用来支持命令模式的撤销操作   模板方法     可与命令模式相互替换 迭代器Iterater 提供一种方法顺序访问聚合对象的各个元素,而不暴露该对象的内部表示 关键思想是把对聚合对象的访问从聚合对象中出来,放入单独的迭代器中. 迭

java23中设计模式之迭代器模式

package com.bdqn.iterator; public interface MyIterator { //将游标指向第一个元素 void first(); //将游标指向下一个元素 void next(); //判断存在下一个元素 boolean hasNext(); boolean iSFirst(); boolean iSLast(); //获取当前游标指向的对象 Object getCurrentObj(); } MyIterator package com.bdqn.iter

设计模式之迭代器模式--- Pattern Iterator

模式的定义 迭代器模式定义: Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation. 提供一种方法访问一个容器对象中各个元素,而又不需要暴露对象的内部细节. 类型 行为类 模式的使用场景 方便遍历访问容器内的元素 优点 面向对象设计原则中的单一职责原则,对于不同的功能,我们要尽可能的把这个功能分解出单一的职责,不