设计模式之迭代器模式(Java实现)

本文介绍了迭代器模式,其意图在于提供一种方法顺序访问聚合对象的元素而不暴露其内部结构。通过迭代器接口和具体迭代器的实现,支持对不同聚合结构的遍历。在示例中,创建了一个`NameRepository`类,它包含一个内部类`NameIterator`作为迭代器,用于按顺序访问存储的名字。最后,通过`IteratorPattern`类展示了如何使用`NameRepository`打印所有名字。
摘要由CSDN通过智能技术生成

Iterator (迭代器)

一、意图

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

二、结构

迭代器模式的结构图如图7-41所示。
在这里插入图片描述
其中:
• Iterator (迭代器)定义访问和遍历元素的接口。
• Concretelterator(具体迭代器)实现迭代器接口;对该聚合遍历时跟踪当前位置。
• Aggregate (聚合)定义创建相应迭代器对象的接口。
• ConcreteAggregate(具体聚合)实现创建相应迭代器的接口,该操作返回ConcreteIterator
的一个适当的实例。

三、适用性

Iterator模式适用于:
•访问一个聚合对象的内容而无须暴露它的内部表示。
• 支持对聚合对象的多种遍历。
• 为遍历不同的聚合结构提供一个统一的接口。

四、实现

我们将创建一个叙述导航方法的 Iterator 接口和一个返回迭代器的 Container 接口。实现了 Container 接口的实体类将负责实现 Iterator 接口。
IteratorPattern,我们的演示类使用实体类 NamesRepository 来打印 NamesRepository 中存储为集合的 Names。
在这里插入图片描述
首先 创建接口

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

interface Container {
	   public Iterator getIterator();
}

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

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

最后 使用 NameRepository 来获取迭代器,并打印名字

public class IteratorPattern {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		NameRepository namesRepository = new NameRepository();		 
	    for(Iterator iter = namesRepository.getIterator(); iter.hasNext();){
	         String name = (String)iter.next();
	         System.out.println("Name : " + name);	        
	      }
	}
}

运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值