Iterator模式定义:提供一种方法来访问聚合对象的顺序的元件不暴露其底层表示。 维基为什么公开底层表示的迭代器不好?
什么是露出底层表示的后果是什么?
为了提供更详细的解答:迭代器模式如何预防呢?每
Iterator模式定义:提供一种方法来访问聚合对象的顺序的元件不暴露其底层表示。 维基为什么公开底层表示的迭代器不好?
什么是露出底层表示的后果是什么?
为了提供更详细的解答:迭代器模式如何预防呢?每
由于:http://www.oodesign.com/iterator-pattern.html
迭代器模式的想法是采取访问和传递槽收集的对象的责任,并把它的迭代器对象。 迭代器对象将维护迭代的状态,跟踪当前项目并且有一种方法来标识接下来要迭代的元素。
,你可以从这种模式得到一些好处:
如果底层的表示被暴露,客户端代码可以连接到它。然后:
数据抽象使得代码更有弹性,以表示的变化。
背后的实现,你能提供一个你正在谈论的每一个子弹的例子,也就是说,在行动中看到这种后果将是美好的。 – lmiguelvargasf
简而言之:如果您决定更改表示法,则所有依赖于基础表示法的代码都有可以更改。例如,您决定首先使用TreeMap
,但您不想再订购(大多数情况下),因此您更改为HashMap
。有人正在通过你的地图循环试图获得越来越多的列表。 !
使用迭代器模式,你总是可以给用户的能力,通过循环使用的东西一定的逻辑关系(或者只是随机的,这是一种逻辑的),不知道它是什么引擎盖下。
现在,如果您使用HashMap
而不是TreeMap
,则可以向用户展示已排序的视图。如果你提供这个SortedIterator
并告诉用户“使用这将保证结果被排序,但我不能告诉你任何有关下面的内容”,你可以改变表示为任何你喜欢的,只要这个合同SortedIterator
由您维护。
简而言之,您(用户)对'ArrayList','HashMap','HashSet','TreeSet'使用'Iterator'。你不关心 –