FishGUI:迭代器设计模式二-----迭代器模式

设计意图:

迭代器模式提供一了一种机制,可以使我们按照一种统一的方式遍历容器中的所有的节点,而无需了解容器的内部结构,实现这一点的关键是分离容器和容器的迭代器算法;

如果不使用迭代器模式:遍历容器的算法就必须在容器内部。如果用户希望使用多种方式遍历容器,容器结构就会变得非常复杂;如果用户希望在同一时刻使用两种不同的方法来遍历容器,很难在一个类中同时为多种遍历算法记录当前的节点位置

基本结构:

迭代器接口类(Iterator):所有迭代器的抽象类,定义遍历一个容器的统一接口

具体的迭代器类(ConcreteIterator):实现迭代器接口,记录容器内当前节点位置

容器接口类(Aggregate):所有容器类的抽象类,定义容器类的公共接口,以及创建迭代器的方法

具体的容器类(ConcreteAggregate):实现容器的具体的功能,并实现迭代器创建接口,该接口放回一个具体迭代器的指针

实现方法一:多态代器

多态迭代器:即迭代器类都由统一的基类继承出来,拥有统一的接口,不同的派生类适用于遍历不同的容器,而具体的迭代器对象由特定的容器生成

容器类和迭代器类的耦合比较强,虽然客户程序可以在不了解容器内部结构的时候使用迭代器,但是为了能遍历容器,迭代器本身必须了解容器的内部结构,所以,每个具体的迭代器类都是为特定的容器类服务的,每个容器类都可以对应于一系列具体的迭代器类,一般情况下,不同的容器类之间无法公用迭代器类

由于有了容器和迭代器的抽象接口,像查找这样的算法就可以应用在不同的容器上,但是因为容器和迭代器的耦合比较强,容器类必须负责创建相应的迭代器对象。

多态迭代器是通过容器中的工厂方法在内存中创建的,因此客户程序必须负责释放迭代器占用的内存空间

多态迭代器需要分别实现和容器及迭代器相关的两颗继承树,如果继承树上的对象类型较多时可能包含许多强制转换

FishGUI中迭代器模式的具体实现:

容器,迭代器,算法要相互分离,代码应该尽可能地被复用

迭代器可以实现为智能指针,以方便客户的使用

迭代器可以简单地作为局部变量使用,因此多态迭代器的方案并不可取

在FishGUI系统中实现迭代器的主要思路是利用模板参数来实现对不同迭代器的静态绑定


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值