迭代器模式——Iterator
1、 迭代器模式(Iterator)
提供一种方法顺序访问一个聚合对象中各个元素,而不不暴露该对象的内部表示。
当需要访问一个聚焦对象,而且不管这些对象是什么都需要遍历的时候,就应该考虑使
用迭代器模式。特别当需要对聚焦有多种方式遍历时,更应该考虑迭代器模式,为遍历不同的聚焦结构提供如开始、下一个、是否结束、当前哪一个等统一接口。
迭代器模式的结构图如下:
Aggregate:聚焦抽象类。
Iterator:迭代器抽象类,用于定义得到开始对象、得到下一个对象、判断是否到结尾、当前
对象等抽象方法,统一接口。
ConcreteAggregate:具体聚焦类,继承Aggregate。
ConcreteIterator:具体迭代器类,继承Iterator,实现开始、下一个、是否结尾、当前对象等方法。
2、 迭代器的好处
迭代器模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以
做到不暴露集合的内部结构,又可以让外部代码同名地访问集合内部的数据。
但是由于它太普遍了,所以各种高级语言都对它进行了封装,所以,反而给人感觉此模式本身不太常用。
- 1楼ccf19881030昨天 23:47
- C++里面的STL里的list、vector等应该在设计时应用到了这个模式,另外Java也相应的使用了这个模式吧。最近在看<<Head First设计模式>>,学习了里面的一些模式,发觉自己差不多能看懂里面的例子,但是应用到具体问题时往往不知道该用哪个模式和如何使用相应模式解决实际问题。比如说计算器使用状态模式来解决的话,可以分解为左操作数状态、运算符状态、有操作数状态、结果状态、错误状态等,不知道对不对?
- Re: Nancy_m昨天 16:15
- 回复ccf19881030n嗯。可以这样做,计算器类在不同的状态下,对于相同的外界的输入,计算器类表现出不同的行为。这样为了使状态转换在计算器中的判断不过于复杂且易于状态的扩展,状态模式不失为一种好的解决方法。