Iterator模式定义:提供一种顺序访问聚合对象元素的方法,而不会暴露其底层表示。 维基
公开基础代表会产生什么后果?
提供更详细的答案:迭代器模式如何防止这种情况?
答案 0 :(得分:5)
根据:http://www.oodesign.com/iterator-pattern.html
迭代器模式的想法是负责访问和传递集合的对象并将其放在迭代器对象中。 迭代器对象将保持迭代的状态,跟踪当前项并有一种方法来识别接下来要迭代的元素。
您可以从这种模式中获得很多好处:
答案 1 :(得分:1)
如果底层表示被暴露,客户端代码可以耦合到它。然后:
数据抽象使代码更能适应表示的变化。
答案 2 :(得分:1)
简而言之:如果您决定更改表示,则依赖于基础表示的所有代码都将更改。
例如,您最初决定使用TreeMap
,但之后您不再需要订购(在大多数情况下),因此您更改为HashMap
。有人正在遍历你的地图,试图获得越来越多的列表。 !!
使用迭代器模式,你总是可以让用户能够循环使用某种逻辑(或者只是随机的,这是一种逻辑)而不知道它是什么。
现在,如果您使用HashMap
而不是TreeMap
,则可以向用户公开已排序的视图。如果你提供这个SortedIterator
并告诉用户“使用它将保证结果被排序,但我无法告诉你任何关于下面的内容”,你可以将表示更改为你喜欢的任何内容,只要您SortedIterator
的合同由您维护。