这个设计模式感觉很easy,我们平时敲代码的时候也是常常须要调用iterator的,C++和Java都是。

所以感觉没什么特别的。就是须要模仿C++或者Java的iterator类的功能吧。

这里简单写个,使用C++模仿Java的iterator一些功能,呵呵。

首先我们有一个集合类,而这个集合类包括了其它类,当我们须要遍历这个集合类包括的类的时候。就好使用iterator功能了。

比方有一个原始的类:

class SalesPerson
{
private:
string name;
string division; public:
explicit SalesPerson(string n = "", string d = "") : name(n), division(d) {} string getName()
{
return name;
} void print()
{
printf("SalesPerson %s is in %s department.\n", name.c_str(), division.c_str());
}
};

然后以下是集合类包括了上面的类:

class Division
{
private:
string name;
SalesPerson **sales;
int number;
DivisionIterator *dit;
int Len; public:
Division(string n) : name(n), Len(100), number(0), dit(NULL)
{
sales = new SalesPerson*[Len];
for (int i = 0; i < Len; i++)
{
sales[i] = NULL;
}
}
~Division()
{
for (int i = 0; i <= number; i++)
{
delete sales[i];
}
if (sales) delete [] sales;
if (dit) delete dit;
} string getName()
{
return name;
} void add(string n)
{
sales[number++] = new SalesPerson(n, name);
} DivisionIterator *iterator()
{
if (!dit) dit = new DivisionIterator(sales);
return dit;
}
};

上面的iterator函数就是返回DivisionIterator类。方便遍历这个集合类里面的类了。

class DivisionIterator
{
private:
SalesPerson **sales;
int location;
int Len; public:
DivisionIterator(SalesPerson **v) : sales(v), location(0), Len(100)
{
} SalesPerson *next()
{
return sales[location++];
} bool hasNext()
{
if (location < Len && sales[location]) return true;
return false;
} void remove() //临时空功能
{
}
};

最后測试其遍历功能:

void salesIteratorTest()
{
Division divs("SalesDep"); divs.add("Sally");
divs.add("Jelly");
divs.add("Lily");
divs.add("Billy");
divs.add("Cherry"); DivisionIterator *it = divs.iterator();
while (it->hasNext())
{
SalesPerson *sa = it->next();
sa->print();
}
}

结果:

遍历功能是没问题的,这个设计模式运用成功。非常easy。

只是最郁闷的不是这个设计模式,而是Flyweight设计模式,感觉就是一个简单的功能函数也归结为一个设计模式,或许我学的还不是非常透切吧。

整体来说设计模式还是非常实用的。眼下正在运用设计模式写框架呢,写成了拿出来show show。

或者做成开源项目了。

Design Pattern Iterator 迭代器设计模式的更多相关文章

  1. [Design Pattern] Iterator Pattern 简单案例

    Iterator Pattern,即迭代时模式,按照顺序依次遍历集合内的每一个元素,而不用了解集合的底层实现,属于行为类的设计模式.为了方便理解记忆,我也会称其为遍历模式. 下面是一个迭代器模式的简单 ...

  2. Design Pattern Memo 备忘录设计模式

    本设计模式就是简单地记录当前状态.然后利用记录的数据恢复. 比方首先我们有一个类.类须要记录当前状态进行相关的工作的: class Memo; class Human { public: string ...

  3. design pattern Builder 生成器设计模式

    其实设计模式可以学习很有趣,你并不需要有这么难啃旱地FOG对我来说,当然,这些都是健康的骨骼啃啃. 在本文中,建造者模式设计一个搞笑的一幕.根据这一模型来学习功夫的方法,哈哈. 基类的第一,设计.那么 ...

  4. Design Pattern Command 命令设计模式

    这种设计模式是使用不同类的包裹不同的命令,达到什么样的命令执行什么操作. 有可能进一步利用map您最喜欢的对接命令字. 正在运行的类实际上已经包含了操作的所有需求,例如: class SuperMak ...

  5. Design Pattern Bridge 桥设计模式

    桥设计模式事实上就是一个简单的has a relationship.就是一个类拥有还有一个类,并使用还有一个类实现须要的功能. 比方遥控器和电视之间能够使用桥设计模式达到能够使用同一个遥控器控制多台电 ...

  6. Flyweight Design Pattern 共享元设计模式

    就是利用一个类来完毕多种任务.不用每次都创建一个新类. 个人认为这个设计模式在C++里面,好像能够就使用一个函数取代,利用重复调用这个函数完毕任务和重复利用这个类,好像几乎相同. 只是既然是一个设计模 ...

  7. Design Pattern Adaptor 适配器设计模式

    适配器设计模式是为了要使用一个旧的接口,或许这个接口非常难用,或许是和新的更新的接口不兼容,所以须要设计一个适配器类,然后就能够让新旧的接口都统一. 就是这种一个图: watermark/2/text ...

  8. [Design Pattern With Go]设计模式-工厂模式

    这次介绍的设计模式是工厂模式,这是一个比较常见的创建型模式.一般情况下,工厂模式分为三种:简单工厂.工厂方法和抽象工厂,下面慢慢举例介绍下. 简单工厂 考虑一个加密程序的应用场景,一个加密程序可能提供 ...

  9. [Design Pattern With Go]设计模式-单例模式

    定义 一个类只允许创建一个对象(或者实例),那这个类就是一个单例类,这种设计模式就叫作单例模式.当某些数据只需要在系统中保留一份的时候,可以选择使用单例模式. 饿汉式 饿汉式的实现方式比较简单.在类加 ...

随机推荐

  1. MEMS微加工技术

    MEMS的微加工有两种方法,一种是多层平面加工技术,还有一种是基于SOI的体加工技术. (一)多层平面加工技术 这种方法加工出来的结构有三层:作为主体的多晶硅层.作为暂时填充物的氧化物牺牲层以及多晶硅 ...

  2. QT:“下载速度柱状图”的模拟实现——思路真好,会动脑筋,连我都有了启发(这个思路好像是通用的)

    不知是哪个版本的迅雷,有个“下载速度柱状图”的小界面,我比较喜欢(只不过最新版本的迅雷却没了),所以决定来山寨一个.当然,这个山寨品不能下载文件,呵呵. 思路:1:将界面的背景涂成黑色2:每隔0.1秒 ...

  3. centos 6.5 安装docker

    Docker 安装: 1.centos 6 安装 yum update 升级到centos 6.7版本: yum install -y epel-release 安装 epel扩展源 yum inst ...

  4. 续前篇---数据挖掘之聚类算法k-mediod(PAM)原理及实现

    上一篇博文中介绍了聚类算法中的kmeans算法.无可非议kmeans由于其算法简单加之分类效率较高 已经广泛应用于聚类应用中. 然而kmeans并非十全十美的.其对于数据中的噪声和孤立点的聚类带来的误 ...

  5. hdu 1715 大菲波数_java

    用java的大数解决 import java.math.BigInteger; import java.util.Scanner; public class Main { public static ...

  6. Makefile里面的$(MAKE)到底是啥

    [已解决]Makefile里面的$(MAKE)到底是啥 [复制链接] http://bbs.chinaunix.net/thread-4164499-1-1.html make 定义了很多默认变量,像 ...

  7. Web堡垒机

    最近研究了一下开源的web堡垒机,涉及两个,一个是gateone(python):一个是Web SSH Proxy(java),简单的对后者进行了改造,使其在登录与linux系统交互的时候,不需要使用 ...

  8. UVA 1601 The Morning after Halloween

    题意: 给出一个最大为16×16的迷宫图和至多3个ghost的起始位置和目标位置,求最少经过几轮移动可以使三个ghost都到达目标位置.每轮移动中,每个ghost可以走一步,也可以原地不动,需要注意的 ...

  9. 9会飞的li标签

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  10. Git 和 SVN之间的五个基本区别

    GIT不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等.如果你是一个具有使用SVN背景的人,你需要做一定的思想转换,来适应GIT提供的一些概念和特征.所以,这篇文章的主要目的就是 ...