设计模式——迭代器模式

迭代器模式(落没的设计模式)

定义

它提供一种方法访问一个容器对象中各个元素,而又不需要暴露该对象的内部细节。

迭代器是为容器服务的,能容纳元素的对象可以称为容器,例:List、Set、Map

迭代器模式(Iterator Pattern)已经是没落的设计模式,常用的容器基本都有成熟稳定的实现,基本不会再去单独写一个迭代器。

实验小结

  1. 即一个实例对象中封装了一个集合,该类通过实现接口中的iterator方法获得一个迭代器对象,通过迭代器对象对实例中的集合进行遍历。
  2. 本质就是自己实现一个迭代器,但是目前集合的API中基本都实现了迭代器,并且结合1.8 Stream的特性,完全没有必要自己写迭代器了

代码模拟场景

老板想要查看往期项目的汇总报表,构建一个迭代器装载“项目”对象,再进行迭代展示。

迭代器模式

UML图

在这里插入图片描述

项目业务接口及实现类

/**
 * 项目信息接口
 */
public interface IProject {
	// 老板要阅览的项目信息
	public String getProjectInfo();
	// 添加两个方法
	// 增加项目
	public void add(String name,int num,int cost);
	// 获得一个可以被遍历的对象
	public IProjectIterator iterator();
}

public class Project implements IProject {
	// 定义一个项目列表,所有的项目都放这里
	private List<IProject> projectList = new ArrayList<>();
	// 项目名称
	private String name;
	// 项目成员数量
	private int num;
	// 项目费用
	private int cost;
	public Project() {
	}
	public Project(String name, int num, int cost) {
		this.name = name;
		this.num = num;
		this.cost = cost;
	}
	@Override
	public String getProjectInfo() {
		String info = "";
		// 获得项目的名称
		info = info + "项目的名称是:" + this.name;
		// 获得项目人数
		info = info + "\t项目人数" + this.num;
		// 项目费用
		info = info + "\t项目费用" + this.cost;
		return info;
	}
	// 增加项目
	@Override
	public void add(String name, int num, int cost) {
		this.projectList.add(new Project(name, num, cost));
	}
	// 获得迭代器对象
	@Override
	public IProjectIterator iterator() {
		return new ProjectIterator(this.projectList);
	}
}

迭代器接口及实现类

/**
 * 迭代器接口
 */
public interface IProjectIterator extends Iterator<IProject> {
}

public class ProjectIterator implements IProjectIterator {
	// 所有的项目都在List中
	private List<IProject> projectList = new ArrayList<>();
	private int currentItem = 0;
	public ProjectIterator(List<IProject> projectList) {
		this.projectList = projectList;
	}
	@Override
	public boolean hasNext() {
		boolean b = true;
		if (this.currentItem >= projectList.size() || this.projectList.get(this.currentItem) == null) b = false;
		return b;
	}
	@Override
	public IProject next() {
		return this.projectList.get(this.currentItem++);
	}
}

入口类

/**
 * 迭代器模式
 */
public class IteratorMain {
	public static void main(String[] args) {
		IProject project = new Project();
		project.add("星球大战项目", 10, 100000);
		project.add("扭曲时空项目", 100, 10000000);
		project.add("超人改造项目", 10000, 1000000000);
		for (int i = 4; i < 104; i++) {
			project.add("第" + i + "个项目", i * 5, i * 1000000);
		}
		// 迭代器模式
		IProjectIterator projectIterator = project.iterator();
		while (projectIterator.hasNext()) {
			IProject p = projectIterator.next();
			System.out.println(p.getProjectInfo());
		}
	}
}

结果

在这里插入图片描述

参考书籍

秦小波《设计模式之禅》

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

加把劲骑士RideOn

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

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

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

打赏作者

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

抵扣说明:

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

余额充值