Iterator模式C++实现】的更多相关文章

1.模版除了传参,还可以自动创建.而传指针只是传参而已. template <class TYPE, class FUNCTOR, class ACE_LOCK, typename TIME_POLICY = ACE_Default_Time_Policy> class ACE_Timer_List_T : public ACE_Timer_Queue_T<TYPE, FUNCTOR, ACE_LOCK, TIME_POLICY> { public: /// Type of ite…
类图 /** * 自己定义集合接口, 相似java.util.Collection * 用于数据存储 * @author stone * */ public interface ICollection<T> { IIterator<T> iterator(); //返回迭代器 void add(T t); T get(int index); } /** * 自己定义迭代器接口 相似于java.util.Iterator * 用于遍历集合类ICollection的数据 * @auth…
STL里的iterator就是应用了iterator模式. 一.什么是迭代模式 Iterator模式也叫迭代模式,是行为模式之一,它把对容器中包含的内部对象的访问委让给外部类,使用Iterator按顺序进行遍历访问的设计模式. 二.不使用迭代模式的应用 在应用Iterator模式之前,首先应该明白Iterator模式用来解决什么问题.或者说,如果不使用Iterator模式,会存在什么问题. 由容器自己实现顺序遍历.直接在容器类里直接添加顺序遍历方法 让调用者自己实现遍历.直接暴露数据细节给外部.…
上了这么多年学,我发现一个问题,好象老师都很喜欢点名,甚至点名都成了某些老师的嗜好,一日不点名,就饭吃不香,觉睡不好似的,我就觉得很奇怪,你的课要是讲的好,同学又怎么会不来听课呢,殊不知:“误人子弟,乃是犯罪!”啊. 好了,那么我们现在来看老师这个点名过程是如何实现吧:1.老规矩,我们先定义老师(Teacher)接口类: public interface Teacher { public Iterator createIterator(); //点名 } 2.具体的老师(ConcreteTeac…
什么是迭代器模式? 让用户通过特定的接口访问容器的数据,不需要了解容器内部的数据结构. 首先我们先模仿集合中ArrayList和LinkedList的实现.一个是基于数组的实现.一个是基于链表的实现,实现方式各有不同, 为了减少代码的耦合度,面向接口编程.定义Collection接口定义API规范. 可是在遍历集合中的元素时,由于数组和链表的遍历方式不一样,能不能统一处理呢? 再定义一个Iterator接口,让每一个子类集合都实现接口中的方法. 1.接口Collection.java publi…
Iterator模式用于在数据集合中按照顺序遍历集合.即迭代器模式. 下面来看一段实现了迭代器模式的示例程序. 这段程序的作用是将书(Book)放置到书架(BookShelf)中,并将书的名字按顺序显示出来. 首先写一个Aggregate接口,这个接口是所要遍历的集合的接口.实现了该接口的类将成为一个可以保存多个元素的集合,就像数组一样. 在Aggregate接口中声明的方法只有一个iterator()方法,该方法会生成一个用于遍历集合的迭代器. package BigJunOba.bjtu.I…
一. 举例说明 我们知道,在 STL 里提供 Iterator 来遍历 Vector 或者 List 数据结构. Iterator 模式也正是用来解决对一个聚合对象的遍历问题,将对聚合的遍历封装到一个类中进行,这样就避免暴露这个聚合对象的内部表示的可能. 例如在 STL 里有如相下结构: 二. 迭代器模式 定义:提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示. 比较经典的例子是 STL 里的 for_each 操作: // function called for each…
Iterator模式 --一个一个遍历 在Java中的for语句中 i++的作用是让 i 的值在每次循环后自增1,这样就可以访问数组中的下一个元素.下下一个元素.再下下一个元素,也就实现了从头至尾逐一遍历数组元素的功能. 将这里的循环变量 i的作用抽象化.通用化后形成的模式,在设计模式中称为 Iterator 模式. 示例程序 Aggregate接口 Aggregate接口是索要遍历的集合的接口.实现了该接口的类将称为一个可以保持多个元素的集合. public interface Aggrega…
分类: [java]2013-07-15 10:58 917人阅读 评论(0) 收藏 举报 所谓Iterator模式,即是Iterator为不同的容器提供一个统一的访问方式.本文以java中的容器为例,模拟Iterator的原理.参考:马士兵 Java设计模式 Iterator1.首先定义一个容器Collection接口. package com.njupt.zhb.learn.iterator; public interface Collection { void add(Object o);…
1.Iterator模式 迭代器(iterator)有时又称游标(cursor)是程序设计的软件设计模式,可在容器(container,例如链表或者阵列)上遍访的接口,设计人员无需关心容器的内容. Iterator模式 - 一个一个遍历,我们将学习从含有多个元素的集合中将各个元素逐一取出来的iterator模式. 导学 对于数组我们使用的是下标来进行处理的: 1 int array[] = new int[3];    2 for (int i = 0; i < array.length; i+…
意图 又名:游标(Cursor): 提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示. 动机 一个聚合对象,提供访问元素的方法,而有不暴露它的内部结构.如list,将对列表的访问和遍历从列表对象中分离出来并放入一个迭代器(iterator)中.迭代器定义了一个访问该列表元素的接口.迭代器负责跟踪当前元素. java实现要素:迭代器接口+迭代器+集合接口+集合实现 集合接口中定义,返回迭代器的接口方法 集合对象中具体实现返回的迭代器 代码实现 //迭代器接口 public i…
迭代器模式提供一种方法顺序访问聚合对象中的各个元素,而又不需要暴露该聚合对象的内部表示.对于该模式,估计几乎所有的人都使用过,在此直接给出类结构图参考如下: 如前所述,迭代器模式的思想主要是:一能提供顺序访问各个元素且不需要暴露内部细节:二是要能够访问具体 元素.从而达到简化聚合对象的接口的目的 .因此,Iterator所提供的接口需要包括对列表的遍历操作以及对元素的访问操作.如上图所提供的是列表的遍历操作,其实还应该提供元素的访问操作,如:operator->()与operator.(),或者…
概述 迭代器模式简单的说(按我目前的理解)就是一个类提供一个对外迭代的接口,方面调用者迭代.这个迭代接口至少包括两个方法:hasNext()--用于判断是否还有下一个,next()--用于取出下一个对象(或值).而外部使用这个类(取出这个类中的对象或值)时,不用关心这个类存储对象或数据的具体数据结构,即使这个类的存储数据结构临时发生改变,调用者不作任何代码修改仍然可以正常工作.从而实现代码的可重用性和低耦合性.下面以实例说明. 实例 假设有两个书架(BookShelf),一个书架用数组Array…
说起遍历,我立马就想到for循环,增强for循环,foreach循环这类的循环遍历,这个不错,既然有这么方便的遍历,为什么我们还要学习Iterator这样的遍历呢? 一个重要的理由是:引入Iterator后可以将遍历和实现分离开来 此话怎讲?什么意思呢? 来说明这样的一个场景: 刚开始写程序时,我们用的是Array,我们自定义的时候指定大小,然后用for循环进行遍历的如火如荼,突然有一天,要求变了,数组大小可变,并且要求使用ArrayList来定义这个集合,那么是不是所有的原来定义为Array的…
迭代子模式又叫做游标模式.迭代子模式可以顺序地访问一个聚集中的元素而必暴露聚集的内部表象. 1.  聚集和Java聚集 多个对象在一起形成的总体形成聚集(Aggregate),聚集对象是能够包容一组对象的容器对象.数组就是最基本的聚集,也是其他Java聚集对象的设计基础. Java聚集(Collection)对象是实现了共同的接口(java.util.Collection)的对象.从1.2版本开始提供了很多聚集,包括Vector.ArrayList.Queue.Stack.LinkedList.…
目录 迭代器模式的类图 类图的解释 迭代器模式的代码 解释 原因 思想 迭代器模式的类图 类图的解释 名称 说明 Aggregate 集合接口,有提供迭代器的方法 Iterator 迭代器接口,提供迭代操作 BookShelf 书架类 Book 书类 BookShelfIterator 书架类的迭代器 迭代器模式的代码 //集合接口 public interface Aggregate { //生成迭代器的方法 public abstract Iterator iterator(); } //迭…
Iterator迭代器的定义:迭代器(Iterator)模式,又叫做游标(Cursor)模式.GOF给出的定义为:提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节. 直接看代码分析理解: 接口Iterator集合迭代器 /** * @Acthor: * @ClassName:Iterator * @Description:循环遍历 */ public interface Iterator { boolean hasNext(); Object next(…
思考题 public void printMenu() { PancakeHouseMenu pancakeHouseMenu = new PancakeHouseMenu(); ArrayList breakfastItems = pancakeHouseMenu.getMenuItems(); DinerMenu dinerMenu = new DinerMenu(); MenuItem[] lunchItems = dinerMenu.getMenuItems(); for (int i…
这篇文章比较简单,作一个笔记. 模拟Iterator. Iterator接口: package cn.asto.Interator; public interface Iterator { public boolean hasNext(); public Object next(); } ArrayList类: package cn.asto.Interator; public class ArrayList implements List{ private int index = 0; pri…
Iterator英文意思是重复做某件事,中文翻译为迭代器,这个设计模式中主要有Iterator(迭代器),ConcreteIterator(具体的迭代器),Aggergate(集合),ConcreteAggregate(具体的集合)四个角色:下面举一个例子来说明. 对某个书架上的书进行遍历,并把每本书的书名打印到控制台上. 1,首先创建Aggergate和Iterator接口 public interface Aggregate { public abstract Iterator iterat…
原文链接 #include <iostream> using namespace std; typedef int DATA; class Iterator; // 容器的抽象基类 class Aggregate { public: virtual ~Aggregate(){} virtual Iterator* CreatIterator(Aggregate *pAggregate)=0; virtual int GetSize()=0; virtual DATA GetItem(int n…
目的:将数据的存储和数据的查询分开,降低数据的耦合性 继承关系图: 例子: //定义迭代器接口 template<typename T> class Iterator { public: virtual bool hasNext() = 0; virtual T next() = 0; }; //定义集合的接口 template<typename T> class Aggregate { public: virtual Iterator<T>* createIterat…
转自:http://blog.csdn.net/lilu_leo/article/details/7609496 概述      迭代器(Iterator)模式,又叫做游标(Cursor)模式.GOF给出的定义为:提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节. 在面向对象的软件设计中,我们经常会遇到一类集合对象,这类集合对象的内部结构可能有着各种各样的实现,但是归结起来,无非有两点是需要我们去关心的:一是集合内部的数据存储结构,二是遍历集合内部的数据…
概述 在面向对象的软件设计中,我们经常会遇到一类集合对象,这类集合对象的内部结构可能有着各种各样的实现,但是归结起来,无非有两点是需要我们去关心的:一是集合内部的数据存储结构,二是遍历集合内部的数据.面向对象设计原则中有一条是类的单一职责原则,所以我们要尽可能的去分解这些职责,用不同的类去承担不同的职责.Iterator模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明的访问集合内部的数据. 意图 提供一种方法顺序访问一个聚合对象中…
原文 第15章 迭代器模式(Iterator Pattern) 迭代器模式(Iterator Pattern)    概述: 在面向对象的软件设计中,我们经常会遇到一类集合对象,这类集合对象的内部结构可能有着各种各样的实现,但是归结起来,无非有两点是需要我们去关心的:一是集合内部的数据存储结构,二是遍历集合内部的数据.面向对象设计原则中有一条是类的单一职责原则,所以我们要尽可能的去分解这些职责,用不同的类去承担不同的职责.Iterator模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责…
动机(Motivate):     在软件构建过程中,集合对象内部结构常常变化各异.但对于这些集合对象,我们希望在不暴露其内部结构的同时,可以让外部客户代码透明地访问其中包含的元素;同时这种“透明遍历”也为“ 同一种算法在多种集合对象上进行操作”提供了可能. 使用面向对象技术将这种遍历机制抽象为“迭代器对象”为“应对变化中的集合对象”提供了一种优雅的方法.意图(Intent):     提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示.-------<设计模式>GOF…
  14.1.解释 概念:提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示. main(),客户 IProject,产品接口 CProject,产品类 IIterator,迭代器接口 IProjectIterator,产品迭代器接口 CProjectIterator,产品迭代器实现类 说明:CProject实现产品类,能够返回一个迭代器的指针.这个迭代器将封装产品类里的一个数组.所以迭代器在运行Next函数时,可以遍历这个数组的所有元素. 简单来说,就是用代码实现vect…
一.什么是迭代模式 Iterator模式也叫迭代模式,是行为模式之 一,它把对容器中包含的内部对象的访问委让给 外部类,使用Iterator(遍历)按顺序进行遍历 访问的设计模式. 二.不使用迭代模式的应用 在应用Iterator模式之前,首先应该明白Iterator 模式用来解决什么问题.或者说,如果不使用 Iterator模式,会存在什么问题. 1.由容器自己实现顺序遍历.直接在容器类里直接添加顺序遍历方法 2.让调用者自己实现遍历.直接暴露数据细节给外部. 三.不使用迭代模式的缺点 以上方…
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gray; border-width: 2px 0 2px 0;} th{border: 1px solid gray; padding: 4px; background-color: #DDD;} td{border: 1px solid gray; padding: 4px;} tr:nth-chil…
概述 在面向对象的软件设计中,我们经常会遇到一类集合对象,这类集合对象的内部结构可能有着各种各样的实现,但是归结起来,无非有两点是需要我们去关心的:一是集合内部的数据存储结构,二是遍历集合内部的数据.面向对象设计原则中有一条是类的单一职责原则,所以我们要尽可能的去分解这些职责,用不同的类去承担不同的职责.Iterator模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明的访问集合内部的数据. 意图 提供一种方法顺序访问一个聚合对象中…