提供一种方法访问一个容器对象中各个元素,而又不需暴露该对象的内部细节。
    迭代器模式属于行为型模式。
    迭代器(Iterator)模式,又叫做游标(Cursor)模式。
    Java中的Map、List等容器,都使用到了迭代器模式。

    迭代器模式 - 图1

    角色声明
    Iterator(迭代器接口):负责定义、访问和遍历元素的接口。
    ConcreteIterator(具体迭代器类):实现迭代器接口。
    Aggregate(容器接口):定义容器的基本功能以及提供创建迭代器的接口。
    ConcreteAggregate(具体容器类):实现容器接口中的功能。
    Client(客户端类):即要使用迭代器模式的地方

    1. //迭代器接口
    2. public interface IteratorInterface {
    3. //是否存在下一条记录
    4. boolean hasNext();
    5. //返回当前对象并移动到下一条记录
    6. Object next();
    7. }
    8. //创建容器的基本属性
    9. //容器用于迭代
    10. public interface Aggregate {
    11. //容器大小
    12. int size();
    13. //获取源苏
    14. String get(int index);
    15. //添加人名
    16. void add(String userName);
    17. //移除源苏
    18. void remove(int index);
    19. //返回迭代器对象
    20. IteratorInterface iterator();
    21. }
    22. //迭代器的具体实现类
    23. public class AggreateImpl implements IteratorInterface {
    24. private Aggregate aggregate;
    25. //返回当前索引
    26. private int index;
    27. public AggreateImpl(Aggregate ag){
    28. this.aggregate=ag;
    29. }
    30. @Override
    31. public boolean hasNext() {
    32. //如果索引小于容器大小 那么return true
    33. if (index < aggregate.size()) {
    34. return true;
    35. } else {
    36. return false;
    37. }
    38. }
    39. @Override
    40. public Object next() {
    41. //返回对象并让对象的索引+1
    42. return aggregate.get(index++);
    43. }
    44. }
    45. public class DeliveryAggregate implements Aggregate {
    46. private List <String> list = new LinkedList <>();
    47. // 容器大小
    48. public int size() {
    49. return list.size();
    50. }
    51. public String get(int location) {
    52. return list.get( location );
    53. }
    54. public void add(String tel) {
    55. list.add( tel );
    56. }
    57. @Override
    58. public void remove(int index) {
    59. list.remove( index );
    60. }
    61. @Override
    62. public IteratorInterface iterator() {
    63. return new AggreateImpl( this );
    64. }
    65. }
    66. public class AggreateClient {
    67. public static void main(String[] args) {
    68. Aggregate aggregate = new DeliveryAggregate();
    69. aggregate.add("1111");
    70. aggregate.add("2222");
    71. aggregate.add("3333");
    72. aggregate.add("9527");
    73. IteratorInterface iterator = aggregate.iterator();
    74. while (iterator.hasNext()) {
    75. String tel = (String) iterator.next();
    76. System.out.println("当前号码为:" + tel);
    77. }
    78. System.out.println("后面没有了");
    79. }
    80. }