Fork me on GitHub

设计模式 - 迭代器

注意:所有文章除特别说明外,转载请注明出处.

简介

该模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。

场景

1. 访问一个集合对象的内容而无需暴露它内部表示。

2. 遍历不同的集合结构提供统一的接口。

优点

1. 分离集合对象的遍历行为

缺点

1. 类的个数成对增加

相关设计模式

1. 迭代器模式与访问者模式

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

迭代器模式

1.创建接口

public interface Iterator {
   public boolean hasNext();
   public Object next();
}

public interface Container {
   public Iterator getIterator();
}

2.创建实现 Container 接口的实体类 该类有实现了 Iterator 接口的内部类 NameIterator

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 < names.length){
            return true;
         }
         return false;
      }

      @Override
      public Object next() {
         if(this.hasNext()){
            return names[index++];
         }
         return null;
      }     
   }
}

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

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);
      }  
   }
}

总结

提示:聚合对象拥有两个职责:1.存储数据。2.遍历数据。

可以将遍历数据的行为从聚合对象中分离出来,封装在一个被称之为“迭代器”的对象中,由迭代器来提供遍历聚合对象内部数据的行为。

迭代器模式提供一种方法来访问聚合对象,不用暴露这个对象的内部表示。

将遍历聚合对象中数据的行为提取出来,封装到一个迭代器中,通过专门的迭代器来遍历聚合对象的内部数据。

本文标题:设计模式 - 迭代器

文章作者:Bangjin-Hu

发布时间:2019年10月15日 - 09:22:26

最后更新:2020年03月30日 - 08:23:47

原始链接:http://bangjinhu.github.io/undefined/设计模式 - 迭代器模式/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

Bangjin-Hu wechat
欢迎扫码关注微信公众号,订阅我的微信公众号.
坚持原创技术分享,您的支持是我创作的动力.