设计模式-迭代器模式
  7W8ecOFW4G9x 2023年11月15日 62 0

设计模式-迭代器模式_设计模式

Java 和 .Net 编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。迭代器模式属于行为型模式。

概述

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

把在元素之间游走的责任交给迭代器,而不是聚合对象。 **主要解决:**不同的方式来遍历整个整合对象。

示例

以使用迭代器打印名字为例,总共分三步:

  1. 创建接口:
public interface Iterator {

    public boolean hasNext();

    public Object next();
}
public interface Container {
    public Iterator getIterator();
}
  1. 创建实现了 Container 接口的实体类。该类有实现了 Iterator 接口的内部类 NameIterator。
public class NameRepository implements Container {
 
     private String names[] = {"John", "jingbin", "youlookwhat", "lookthis"};
 
     @Override
     public Iterator getIterator() {
         return new NameIterator();
     }
 
     private class NameIterator implements Iterator {
 
         int index;
 
         @Override
         public boolean hasNext() {
             if (index < names.length) {
                 return true;
             }
             return false;
         }
 
         @Override
         public Object next() {
             if (hasNext()) {
                 return names[index++];
             }
             return null;
         }
     }
 
 }
  1. 使用 NameRepository 来获取迭代器,并打印名字。
NameRepository nameRepository = new NameRepository();
 for (Iterator iterator = nameRepository.getIterator(); iterator.hasNext(); ) {
     String name = (String) iterator.next();
     Log.e("---", name);
     /*
      * /---: John
      * /---: jingbin
      * /---: youlookwhat
      * /---: lookthis
      */
 }

JDK应用实例

**应用实例:**JAVA 中的 iterator。

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

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

使用场景: 1、访问一个聚合对象的内容而无须暴露它的内部表示。 2、需要为聚合对象提供多种遍历方式。 3、为遍历不同的聚合结构提供一个统一的接口。

迭代器模式在JDK中的应用

Iterator<Integer> iter = null;

System.out.println("ArrayList:");
iter = arrayList.iterator();
while (iter.hasNext()) {
    System.out.print(iter.next() + "\t");
}
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月15日 0

暂无评论

推荐阅读
7W8ecOFW4G9x