这个设计模式感觉很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. 闲来瞎扯 -- 在vs2008下编写linux程序

    虽说vim很强大,但是个人感觉器代码提示功能不如visual assist来的强大.如何使用visual assist来实现代码的提示功能呢? 首先说明我的环境 : 宿主机是xp(O(∩_∩)O~还是 ...

  2. gem update --system 302 错误 解决方案(转)

    具体过程如下: 1.InstantRails-2.0安装后,在配置环境变量path中配置ruby/bin目录(如果系统中有多个RUBY,执行命令行的时候系统认的就是path中的) 2.进入DOS命令行 ...

  3. C语言的本质(30)——C语言与汇编之ELF文件格式

    ELF(Executable and Linking Format)文件格式是一个开放标准,各种UNIX系统的可执行文件都采用ELF格式,ELF是一种对象文件的格式,用于定义不同类型的对象文件(Obj ...

  4. CoreData多表操作.

    这次给大家带来的是CoreData多表操作的使用. 首先我们要对CoreData来进行多表操作我们先要创建至少两个实体在工程中. 在创建完成这两个对应的工程实体文件和工程中的类文件后我们现在需要创建一 ...

  5. Unity 之 AfterFixedUpdate,在所有 GameObject FixedUpdate 后执行

    目的 FixedUpdate 在不同的 GameObject 互相之间是没有执行顺序的,我们并不能知道哪个 GameObject 先执行 FixedUpdate. 但是,有的时候我们仍然希望某个 Ga ...

  6. The Balance(母函数)

    The Balance Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

  7. 搭建PhoneGap for Android开发环境

    一.确保Android开发环境正常. 二.下载PhoneGap.可到http://www.phonegapcn.com/去下载,速度快些. 三.新建一个PhoneGap项目 1.在eclipse中新建 ...

  8. C#委托的异步调用【转】

    本文将主要通过“同步调用”.“异步调用”.“异步回调”三个示例来讲解在用委托执行同一个“加法类”的时候的的区别和利弊. 首先,通过代码定义一个委托和下面三个示例将要调用的方法: ); //模拟该方法运 ...

  9. UIPageViewController跳跃切换的问题

    使用的是XHScrollMenu和UIPageViewController来构建5个页面: ViewController1, ViewController2, ViewController3, Vie ...

  10. C#整理7——函数

    数据类型--变量常量--运算符表达式--语句(顺序,分支,循环)--数组--函数 函数 1.定义:能够独立完成某个功能的模块.2.好处:1.结构更清析(编写.维护方便 ).2.代码重用.3.分工开发. ...