Java大数据平台开发 学习笔记(47)—— java设计模式(迭代器模式)知识汇总

it2025-03-03  23

一、前言:

迭代器模式的注意事项和细节:

优点:

提供一个统一的方法遍历对象,客户不用再考虑聚合的类型,使用一种方式就可以遍历对象。隐藏了聚合的内部结构,客户端要遍历对象的时候只需要取迭代器,而不需知道聚合的具体组成。遵循了单一职责原则,如果遍历方式改变,只影响到了迭代器。

缺点:

每个聚合对象都需要一个迭代器,会生成多个迭代器不方便管理。

二、迭代器模式:

2.1、UML 图:

2.2、代码实例:

Step 1) 创建 College 接口:

public interface College { public String getName(); public void addDepartment(String name, String desc); public Iterator createInterator(); }

Step 2) 创建 ComputerCollege 实现类:

public class ComputerCollege implements College{ Department[] departments; int numOfDepartment = 0; public ComputerCollege(){ departments = new Department[5]; addDepartment("java专业","java专业"); addDepartment("php专业","php专业"); addDepartment("大数据专业","大数据专业"); } @Override public String getName() { return "计算机学院"; } @Override public void addDepartment(String name, String desc) { Department department = new Department(name, desc); departments[numOfDepartment] = department; numOfDepartment += 1; } @Override public Iterator createInterator() { return new ComputerCollegeIterator(departments); } }

Step 3) 创建 InfoCollege 实现类:

public class InfoCollege implements College{ List<Department> departmentList; public InfoCollege() { this.departmentList = new ArrayList<>(); addDepartment("信息安全专业","信息安全专业"); addDepartment("网络安全专业","网络安全专业"); addDepartment("服务器安全专业","服务器安全专业"); } @Override public String getName() { return "信息工程学院"; } @Override public void addDepartment(String name, String desc) { Department department = new Department(name, desc); departmentList.add(department); } @Override public Iterator createInterator() { return new InfoCollegeInterator(departmentList); } }

Step 4) 创建 ComputerCollegeIterator 抽象类:

public class ComputerCollegeIterator implements Iterator { Department[] departments; int position = 0; public ComputerCollegeIterator(Department[] departments) { this.departments = departments; } @Override public boolean hasNext() { if (position >= departments.length || departments[position] == null){ return false; }else { return true; } } @Override public Object next() { Department department = departments[position]; position += 1; return department; } }

Step 5) 创建 InfoCollegeInterator 实现类:

public class InfoCollegeInterator implements Iterator { List<Department> departmentList; int index = -1; public InfoCollegeInterator(List<Department> departmentList) { this.departmentList = departmentList; } @Override public boolean hasNext() { if(index >= departmentList.size() -1){ return false; }else { index += 1; return true; } } @Override public Object next() { return departmentList.get(index); } }

Step 6) 创建 Department 类:

public class Department { private String name; private String desc; public Department(String name, String desc) { this.name = name; this.desc = desc; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDesc() { return desc; } public void setDesc(String desc) { this.desc = desc; } }

Step 7) 创建 OutPutImpl 类:

public class OutPutImpl { List<College> collegeList; public OutPutImpl(List<College> collegeList) { this.collegeList = collegeList; } public void printCollege(){ Iterator<College> iterator = collegeList.iterator(); while (iterator.hasNext()){ College college = iterator.next(); System.out.println("==="+college.getName()+"==="); pringtDepartment(college.createInterator()); } } public void pringtDepartment(Iterator iterator){ while (iterator.hasNext()){ Department d = (Department) iterator.next(); System.out.println(d.getName()); } } }

Step 8) 创建 main 方法:

public class Client { public static void main(String[] args) { ArrayList<College> collegeArrayList = new ArrayList<>(); ComputerCollege computerCollege = new ComputerCollege(); InfoCollege infoCollege = new InfoCollege(); collegeArrayList.add(computerCollege); collegeArrayList.add(infoCollege); OutPutImpl outPut = new OutPutImpl(collegeArrayList); outPut.printCollege(); } }

• 由 ChiKong_Tam 写于 2020 年 10 月 21 日

最新回复(0)