C++设计模式--迭代子模式

迭代子模式提供访问聚合对象的方法而不暴露其内部结构,它定义了迭代器接口,具体迭代器实现该接口并跟踪遍历位置。适用于需要多种遍历方式或统一接口遍历不同聚合的场景。在C++中,迭代器模式简化了聚合类,但增加新的聚合可能需要对应增加新的迭代器。例如,总公司HR管理旗下分公司的人员统计,通过迭代器模式,可以统一不同人力系统的访问方式。
摘要由CSDN通过智能技术生成

迭代子模式(Iterator Pattern)

定义

提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示,其别名为游标(Cursor)。迭代器模式是一种对象行为型模式。

                        

  • Iterator:迭代器定义访问和遍历元素的接口
  • ConcreteIterator:具体迭代器实现迭代器接口;对该聚合遍历时跟踪当前位置
  • Aggregate:聚合定义创建相应的迭代器对象接口
  • ConcreteAggregate:具体聚合实现创建相应迭代器的接口,该操作返回ConcreteIterator的一个适当的实例。

 

常用场景

  • 访问一个聚合对象的内容而无需暴露它的内部表示;
  • 需要为聚合对象提供多种遍历方式
  • 为遍历不同的聚合结构提供一个统一的接口

 

优缺点

优点:

  • 支持不同的 方式遍历聚合对象
  • 迭代器模式简化了聚合类
  • 在同一个聚合上可以有多个遍历
  • 在迭代器模式中,增加新的聚合类和迭代器都很方便,无需修改原有代码


缺点:

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


C++实现

举例:总公司HR管理旗下分公司的人力

当一家公司发展到足够大,需要陆续的合并或收购其他公司,但保持原有公司的人力架构。对于总公司的HR,需要面对不同的人力系统,当要统计各子公司各部门的人力信息时,比较困难。每收购一家公司,都需要熟悉一套新的人力系统。但当每套人力系统对外暴露的统计方式一致时,HR就不需要关心各子公司具体的人力架构。

类图:
                

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值