欢迎您 本站地址:  

迭代器模式

迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式。

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

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

介绍

意图

允许顺序访问一个聚合对象中的元素,同时不暴露对象的内部表示。

主要解决的问题

使用场景

实现方式

关键代码

应用实例

优点

  1. 支持多种遍历方式:不同的迭代器可以定义不同的遍历方式。
  2. 简化聚合类:聚合类不需要关心遍历逻辑。
  3. 多遍历支持:可以同时对同一个聚合对象进行多次遍历。
  4. 扩展性:增加新的聚合类和迭代器类都很方便,无需修改现有代码。

缺点

使用建议

注意事项

结构

迭代器模式包含以下几个主要角色:

实现

我们将创建一个叙述导航方法的 Iterator 接口和一个返回迭代器的 Container 接口。实现了 Container 接口的实体类将负责实现 Iterator 接口。

IteratorPatternDemo,我们的演示类使用实体类 NamesRepository 来打印 NamesRepository 中存储为集合的 Names

迭代器模式的 UML 图

步骤 1

创建接口:

Iterator.java

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

Container.java

public interface Container { public Iterator getIterator(); }

步骤 2

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

NameRepository.java

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 来获取迭代器,并打印名字。

IteratorPatternDemo.java

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

步骤 4

执行程序,输出结果:

Name : Robert
Name : John
Name : Julie
Name : Lora
小库提示

扫描下方二维码,访问手机版。