行为型模式-迭代器模式

 

1.概述

1.1 定义

         迭代器模式提供了一种方法来访问聚合对象中的各个元素,而不用暴露这个对象内部的表示,其别名为游标(Cursor)。

1.2 原理

        将遍历行为分离出来,抽象为一个迭代器,专门提供遍历聚合对象内部数据的行为。

1.3 应用场景

      当为聚合对象提供多种遍历方式,或者为遍历不同的聚合结构提供统一的接口时。

2.类图

 

3.角色

1.Iterator表示抽象迭代器,定义了访问和遍历元素的接口。
2.ConcreteIterator表示具体迭代器,实现了抽象迭代器接口,并在对该聚合遍历时跟踪当前的下标位置。
3.Aggregate表示抽象聚合,定义并创建相应迭代器对象的接口。
4.ConcreteAggregate表示具体聚合,实现了抽象聚合接口,创建和实现相应迭代器的接口,并返回一个ConcreteIterator的实例。
5.Client表示客户端

 

4.优缺点

4.1 优点

1.当访问和遍历一个聚合对象的内容时,无需暴露它的内部表示。
2.可以为聚合对象提供多种遍历方式,或者提供统一的接口。

 

5.案例

5.1 说明

        这里以遍历商品名称为案例,其中商品名称储存在一个字符串数组里面,通过迭代器从前往后进行遍历。

5.2 代码

1)抽象迭代器类

/**
 * 抽象迭代器类
 * @author Administrator
 */
public interface AbstractIterator {
	
	public void next();
	public boolean isLast();
	public String getNextItem();
}

2)具体迭代器类

/**
 * 具体迭代器类
 * @author Administrator
 */
public class ConcreteIterator implements AbstractIterator{
	private String[] productsName;
	private int index;
	
	public ConcreteIterator(AbstractProductList list) {
		productsName = list.getProductsName();
		index = 0;
	}
	
	@Override
	public void next() {
		if(index < productsName.length) {
			index++;
		}
	}

	@Override
	public boolean isLast() {
		return (index == productsName.length);
	}

	@Override
	public String getNextItem() {
		return productsName[index];
	}

}

3)抽象聚合对象类

/**
 * 抽象聚合类:抽象产品集合
 * @author Administrator
 */
public abstract class AbstractProductList {
	private String[] productsName;
	
	public AbstractProductList(String[] productsName) {
		this.productsName = productsName;
	}
	
	public String[] getProductsName() {
		return this.productsName;
	}
	
	//返回迭代器对象
	public abstract AbstractIterator getIterator();
	
}

4)具体聚合对象类

/**
 * 具体聚合类:具体产品集合
 * @author Administrator
 */
public class ConcreteProductList extends AbstractProductList{

	public ConcreteProductList(String[] productsName) {
		super(productsName);
	}

	//返回具体迭代器对象,用于遍历数据
	@Override
	public AbstractIterator getIterator() {
		return new ConcreteIterator(this);
	}

}

5)客户端类

/**
 * 客户端类
 * @author Administrator
 */
public class Client {
	
	public static void main(String[] args) {
		String[] productsName = {"电脑","手机","充电器","耳机","手表"};
		AbstractProductList list = new ConcreteProductList(productsName);
		//这里通过list.getIterator()获取迭代器对象
		AbstractIterator iterator = list.getIterator();
		
		while (!iterator.isLast()) {
			System.out.println(iterator.getNextItem());
			iterator.next();
		}
		
	}

}

4.3 效果

电脑
手机
充电器
耳机
手表

4.4 分析

       通过具体聚合对象返回其迭代器对象,然后就可用对聚合对象的数据进行遍历。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luckyliuqs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值