小工具知识网

当前位置: 首页 > 行业知识 > 18-Java迭代器模式 ( Iterator Pattern )

行业知识

18-Java迭代器模式 ( Iterator Pattern )

2026-11-15 14:59:31 来源:互联网转载

Java迭代器模式

    • 摘要
    • 实现
    • 范���
      • 迭代器模式(Iterator Pattern)用于顺序访问集合对象的元素,不需要知道集合对象的底层表示

      • 迭代器模式是 Java 和 .Net 编程环境中非常常用的设计模式

      • 迭代器模式属于行为型模式

        摘要

        1. 意图

        • 提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示

          2. 主要解决

          • 不同的方式来遍历整个整合对象

            3. 何时使用

            • 遍历一个聚合对象

              4. 如何解决

              • 把在元素之间游走的责任交给迭代器,而不是聚合对象

                5. 关键代码

                • 定义接口:hasNext, next

                  6. 应用实例

                  • JAVA 中的 iterator

                    7. 优点

                    • 它支持以不同的方式遍历一个聚合对象;
                    • 迭代器简化了聚合类;
                    • 在同一个聚合上可以有多个遍历;
                    • 在迭代器模式中,增加新的聚合类和迭代器类都很方便,无须修改原有代码;

                      8. 缺点

                      • 由于迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的迭代器类,类的个数成对增加,这在一定程度上增加了系统的复杂性

                        9. 使用场景

                        • 访问一个聚合对象的内容而无须暴露它的内部表示;
                        • 需要为聚合对象提供多种遍历方式;
                        • 为遍历不同的聚合结构提供一个统一的接口;

                          10. 注意事项

                          • 迭代器模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明地访问集合内部的数据

                            实现

                            1. 定义一个叙述导航方法的Iterator接口和一个返回迭代器的Container接口;
                            2. 实现了Container接口的实体类将负责实现Iterator接口;
                            3. IteratorPatternDemo使用实体类NamesRepository来打印NamesRepository中存储为集合的Names;

                            范例

                            1. 创建接口

                            Iterator.java

                            package com.demo.gof;public interface Iterator {   public boolean hasNext();   public Object next();}

                            Container.java

                            package com.demo.gof;public interface Container {   public Iterator getIterator();}

                            2. 创建实现了 Container 接口的实体类

                            该类有实现了 Iterator 接口的内部类 NameIterator

                            NameRepository.java

                            package com.demo.gof;public class NameRepository implements Container {   public String names[] = {"Robert" , "John" ,"Julie" , "Lora"};   @Override   public Iterator getIterator() {      return new NameIterator();   }   private class NameIterator implements Iterator {      int index;      @Override      public boolean hasNext() {         if(index  

                            3. 使用 NameRepository 来获取迭代器,并打印名字

                            IteratorPatternDemo.java

                            package com.demo.gof;public class IteratorPatternDemo {   public static void main(String[] args) {      NameRepository namesRepository = new NameRepository();      for(Iterator iter = namesRepository.getIterator(); iter.hasNext();){         String name = (String)iter.next();         System.out.println("Name : " + name);      }        }}

                            编译运行以上 Java 范例,输出结果如下

                            $ javac -d . src/main/com.demo/gof/IteratorPatternDemo.java$ java  com.demo.gof.IteratorPatternDemoName : RobertName : JohnName : JulieName : Lora

上一篇:屏幕支架全解析,定义、功能及应用,一篇文章带你轻松掌握!

下一篇:揭秘JPG图像格式,探索奥秘与深度解读