迭代器模式浅析

来源:互联网 发布:数据dat文件打开工具 编辑:程序博客网 时间:2024/06/06 14:09

首先还是官话,迭代器提供了一种顺序访问聚合对象中元素的方法,而不用去暴露结构的底层表现和细节。迭代器定义了一个用于访问集合元素并记录当前的元素的接口。不同的迭代器可以去执行不同的迭代的策略。

迭代器模式的缺点:由于迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的迭代器类,类的个数成对增加,这在一定程度上增加了系统的复杂性。

在迭代器模式中有四个角色我们需要知道的

1、抽象迭代器定义了遍历元素所需要的方法,一般来说可能会有first,next等等方法主要看需求

2、具体迭代器也就是去实现迭代器接口中所定义的方法,去完成集合的迭代。

3、抽象的容器,用于一个提供实例化迭代器的方法

4、具体的容器也就是抽象容器的具体实现,就比如说可以是数组啊之类的容器。

有一个最简单的例子就是比如说一个自动售货机,自动售货机里面装了很多汽水,而我们在外面的时候我们可以去选择的要喝哪瓶汽水,那么这个自动售货机的内部肯定是有内部货架和一个独立的分配器的,如果没有一个独立的分配器的话,那么我拿那一瓶汽水就要在货架上增加功能,这样的话把所有的判断都让货架去做,会很难维护,而且万一我们之后要去做不同型号的售货机了,内部货架不一样了,那我们又要重新去做构思这个货架的功能,如果我们采用的是独立的分配器,那么其实我们就可以在制作下一个的时候进行复用。而且我们也是不会知道自动售货机内部做了什么事情。


迭代器其实也分为外部迭代器和内部迭代器,外部的迭代器的话就是直接让客户端直接的去操作迭代的过程,这样的话客户端要知道外部的迭代器才可以使用,而内部迭代器的话其实就是在内部进行维护并且去操作一个外部的迭代器,集合对象如果使用了内部迭代器的话可以使在不修改客户端代码的情况下,去选择不同的外部迭代器。也就是说直接在内部进行了操作。


在ios中其实NSEnumerator这个类就实现了迭代器模式,NSEnumerator其实本身是一个抽象类,他用的是工厂方法模式,利用objectEnumerator或者是keyEnumerator来创建具体的枚举器对象。


原创粉丝点击