迭代器模式
提供一种方法顺序访问一个聚合对象中的各个元素,而不暴露其内部的表示。
封装的含义
被调用方的操作细节都封装在类中,而不需要被客户端知晓,比如利用迭代器封装类的遍历方式,就不用管目标类中用的是数组,列表,集合来作为容器,我们只需要获取迭代器,迭代器由具体的目标类来实现,客户端就不用操心这这个事情了。
设计原则
一个类应该只有一个引起变化的原因。也就是说一个类只有一个责任,只支持一组相关的功能,这就是高内聚。高内聚可以避免因为修改代码而影响其他方面而造成许多潜在的错误。这是一件很困难的事情,需要长期努力不懈的检查你的设计。遵守这个原则的类具有很高的凝聚力,且更容易维护。
迭代器模式告诉我们什么
迭代器告诉我们的不仅仅是一种集合遍历的模版,更是告诉我们,如果一批类要实现同一种功能,那么就让他们实现相同的接口,这样通过接口,客户端就可以管理这样一批类了,即使扩展了其他的类,也可以通过这种方式进行管理,达到可扩展的目的。
就像Collection下的集合家族,拥有的add() remove() iterator() size() toArray()等方法,都是这种思想,客户端只需要使用方法就可以了,不用关心具体的实现类,从而调用方就解耦了。
总结
一个集合,可以有各种各样的实现方式,以后可能还会扩充更多的实现方式。集合的功能是修改元素和读取元素,在读取元素的时候,如何实现统一呢?这就是迭代器模式的魅力所在,调用方透明的遍历各种集合,而不用了解其内部的细节信息,达到了解耦的目的。这是实现共同接口的一种升华。
抽离变化部分:变化的部分是集合的实现方式不一样,因此遍历的时候,遍历的方法是不一样的。但是可以通过hasNext(),next()这种遍历共性行为,来统一管理集合的遍历。