迭代器模式(落没的设计模式)
定义
它提供一种方法访问一个容器对象中各个元素,而又不需要暴露该对象的内部细节。
迭代器是为容器服务的,能容纳元素的对象可以称为容器,例:List、Set、Map
迭代器模式(Iterator Pattern)已经是没落的设计模式,常用的容器基本都有成熟稳定的实现,基本不会再去单独写一个迭代器。
实验小结
- 即一个实例对象中封装了一个集合,该类通过实现接口中的iterator方法获得一个迭代器对象,通过迭代器对象对实例中的集合进行遍历。
- 本质就是自己实现一个迭代器,但是目前集合的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
参考书籍
秦小波《设计模式之禅》文章来源地址https://www.toymoban.com/news/detail-549566.html
到了这里,关于设计模式——迭代器模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!