迭代器模式:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。
有这样的一个需求。一家集团公司在北京和上海分别有一家子公司,每家公司内部有自己的部门,且自己提供了打印部门的方法。其中一个子公司以数组来保存部门列表,另外一个以ArrayList来保存。现在需要打印所有的部门。
一、原始实现
1 | //部门对象 |
1 | //北京分公司 |
1 | //上海分公司 |
1 | public class TestOld { |
从上面的代码中可以看出,由于两家子公司的实现方式不一样,造成循环遍历时自能使用对应的方式来遍历,造成相当大的不便。
二、使用迭代器模式来解决问题
1 | //迭代器接口 |
1 | //北京分公司的部门迭代器 |
1 | //改造后的北京分公司 |
1 | //上海分公司的部门迭代器 |
1 | //改造后的上海分公司 |
1 | //使用迭代器模式后的代码实现 |
从改造后的代码中可以看出,使用迭代器模式改造后,成功的屏蔽了北京与上海分公司遍历的差异。
在Java中使用Iterator
去遍历ArrayList
应该大部分人都知道,实际上这个Iterator
就是迭代器模式的实现。如果不使用迭代器模式,可以试想一下HasTable
、HashSet
、HashMap
等类型,每一个都得按对应的方式去循环遍历,相当的不方便。
上一篇:设计模式系列之九模板方法模式
下一篇:设计模式系列之十一组合模式