设计模式——迭代器模式

这篇具有很好参考价值的文章主要介绍了设计模式——迭代器模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

定义

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

迭代器是为容器服务的,能容纳元素的对象可以称为容器,例: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());
		}
	}
}

结果

设计模式——迭代器模式,设计模式,设计模式,迭代器模式

参考书籍

秦小波《设计模式之禅》文章来源地址https://www.toymoban.com/news/detail-549566.html

到了这里,关于设计模式——迭代器模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 设计模式——迭代器模式15

    迭代器模式提供一种方法访问一个容器对象中各个元素,而又不需暴露该对象的内部细节。 设计模式,一定要敲代码理解 迭代器模式将数据存储和数据遍历的职责进行分离。但针对不同结构的迭代对象,迭代方式需进行添加。 代码下载

    2024年04月15日
    浏览(46)
  • 设计模式行为型——迭代器模式

    目录 迭代器模式的定义 迭代器模式的实现 迭代器模式角色 迭代器模式类图 迭代器模式代码实现 迭代器模式的特点 优点 缺点 使用场景 注意事项         迭代器模式(Iterator Pattern)属于行为型模式,其提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对

    2024年02月14日
    浏览(36)
  • 行为型设计模式——迭代器模式

    迭代器模式也是非常的简单, 定义如下: 提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。 相信大家都使用过类似下面的迭代器: 如果在你的项目中需要对一个自定义的集合进行迭代遍历,那么迭代器模式是非常需要学习的。迭代器模式主

    2024年01月18日
    浏览(42)
  • Java 设计模式——迭代器模式

    迭代器模式 (Iterator Pattern) 是一种行为型设计模式, 它提供一种顺序访问聚合对象(如列表、集合等)中的元素,而无需暴露聚合对象的内部表示 。迭代器模式将遍历逻辑封装在一个 迭代器对象 中,使得我们可以使用统一的方式遍历不同类型的聚合对象,同时也可以简化客

    2024年02月16日
    浏览(37)
  • 设计模式学习笔记 - 设计模式与范式 -行为型:9.迭代器模式(上):相比直接遍历集合数据,使用迭代器模式有哪些优势?

    上篇文章,我们学习了状态模式。状态模式是状态机的一种实现方式。它通过将事件触发的状态转移和动作执行,拆分到不同的状态类中,以此来避免状态机类中的分支判断逻辑,应对状态机类代码的复杂性。 本章,学习另外一种行为型设计模式,迭代器模式。它用来遍历集

    2024年04月15日
    浏览(57)
  • C#设计模式之---迭代器模式

    迭代器模式(Iterator Pattern)是一种对象行为模式,提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。支持在聚集中移动游标,使得访问聚合中的元素变得简单,简化了聚集的接口,封装了聚合的对象。 迭代器模式还可以应用于对树结构的访

    2024年02月13日
    浏览(51)
  • 经典的设计模式15——迭代器模式

    迭代器模式:提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。 就是说当需要访问一个聚集对象,而且不管这些对象是什么都需要遍历的时候,就应该考虑用迭代器模式。需要对聚集有多种方式遍历时,可以考虑用迭代器模式,比如从头到尾遍

    2024年02月09日
    浏览(76)
  • 《设计模式的艺术》笔记 - 迭代器模式

            迭代器模式提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示,其别名为游标(Cursor)。迭代器模式是一种对象行为型模式。 myclass.h myclass.cpp main.cpp         1. 支持以不同的方式遍历一个聚合对象,在同一个聚合对象上可以定义多种遍历方式。在迭代

    2024年01月24日
    浏览(46)
  • C++设计模式之迭代器模式

    【声明】本题目来源于卡码网(https://kamacoder.com/) 【提示:如果不想看文字介绍,可以直接跳转到 C++编码部分 】         --什么是迭代器模式(第19种设计模式)          迭代器模式 是⼀种 行为设计模式 ,是⼀种使⽤频率⾮常⾼的设计模式,在各个语⾔中都有应用,

    2024年01月24日
    浏览(40)
  • 津津乐道设计模式 - 迭代器模式详解(以购物车的场景来演示迭代器模式)

    😄 19年之后由于某些原因断更了三年,23年重新扬帆起航,推出更多优质博文,希望大家多多支持~ 🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Micro麦可乐的博客 🐥《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程,入门

    2024年02月16日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包