一、应用实例
1、应用实例要求
编写程序展示一个学校院系结构:需求是这样,要在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个院系。
2、设计思路分析
二、代码实现
院系类:Element 即容器中存放的,需要来遍历的单位
1 /**
2 * 院系
3 */
4 public class Department {
5
6 private String name;
7 private String desc;
8
9 public Department(String name, String desc) {
10 this.name = name;
11 this.desc = desc;
12 }
13
14 public String getName() {
15 return name;
16 }
17
18 public void setName(String name) {
19 this.name = name;
20 }
21
22 public String getDesc() {
23 return desc;
24 }
25
26 public void setDesc(String desc) {
27 this.desc = desc;
28 }
29 }
用来遍历计算机学院的 迭代器:
1 /**
2 * ComputerCollegeIterator 以数组方式存放
3 */
4 public class ComputerCollegeIterator implements Iterator {
5
6 /**
7 * 这里我们需要知道 Department 是以怎样的方式存放
8 */
9 Department[] departments;
10 int position = 0; //遍历的位置
11
12
13 public ComputerCollegeIterator(Department[] departments) {
14 this.departments = departments;
15 }
16
17 /**
18 * 判断是否还有下一个元素
19 * @return
20 */
21 @Override
22 public boolean hasNext() {
23 if (position >= departments.length || departments[position] == null) {
24 return false;
25 } else {
26 return true;
27 }
28 }
29
30
31 @Override
32 public Object next() {
33 Department department = departments[position++];
34 return department;
35 }
36
37 /**
38 * 删除的方法默认空实现
39 */
40 @Override
41 public void remove() {
42
43 }
44 }
用来遍历信息工程学院的 迭代器:
1 public class InfoCollegeIterator implements Iterator {
2
3 /**
4 * 信息工程学院是以 List 方式存放系
5 */
6 List<Department> departmentList;
7 int index = -1; //索引
8
9 public InfoCollegeIterator(List<Department> departmentList) {
10 this.departmentList = departmentList;
11 }
12
13 /**
14 * 判断 list中还有没有下一个元素
15 * @return
16 */
17 @Override
18 public boolean hasNext() {
19 if (index >= departmentList.size() - 1) {
20 return false;
21 } else {
22 index += 1;
23 return true;
24 }
25 }
26
27 @Override
28 public Object next() {
29 return departmentList.get(index);
30 }
31
32 @Override
33 public void remove() {
34
35 }
36 }
学院的接口:
1 /**
2 * 学院的接口
3 */
4 public interface College {
5
6 public String getName();
7
8 /**
9 * 增加院系的方法
10 * @param name
11 * @param desc
12 */
13 public void addDepartment(String name, String desc);
14
15 /**
16 * 返回一个迭代器,遍历
17 * @return
18 */
19 public Iterator createIterator();
20 }
计算机学院:
1 public class ComputerCollege implements College{
2
3 Department[] departments;
4 int numOfDepartment = 0; //保存当前数组的对象个数
5
6 public ComputerCollege() {
7 departments = new Department[5];
8 addDepartment("Java", "Java专业");
9 addDepartment("C语言", "C专业");
10 addDepartment("大数据", "大数据专业");
11 }
12
13 @Override
14 public String getName() {
15 return "计算机学院";
16 }
17
18 @Override
19 public void addDepartment(String name, String desc) {
20 Department department = new Department(name, desc);
21 departments[numOfDepartment++] = department;
22 }
23
24 @Override
25 public Iterator createIterator() {
26 return new ComputerCollegeIterator(departments);
27 }
28 }
信息工程学院:
1 public class InfoCollege implements College{
2
3 List<Department> departmentsList;
4
5 public InfoCollege() {
6 departmentsList = new ArrayList<Department>();
7 addDepartment("信息安全", "信息安全专业");
8 addDepartment("网络安全", "网络安全专业");
9 addDepartment("服务器安全", "服务器安全专业");
10 }
11
12 @Override
13 public String getName() {
14 return "信息工程学院";
15 }
16
17 @Override
18 public void addDepartment(String name, String desc) {
19 Department department = new Department(name, desc);
20 departmentsList.add(department);
21 }
22
23 @Override
24 public Iterator createIterator() {
25 return new InfoCollegeIterator(departmentsList);
26 }
27 }
封装一个用于输出的学校信息的类:
1 public class OutputImpl {
2
3 /**
4 * 学院集合
5 */
6 List<College> collegeList;
7
8 public OutputImpl(List<College> collegeList) {
9 this.collegeList = collegeList;
10 }
11
12 /**
13 * 遍历所有学院,然后调用 printDepartment 输出各个学院的系
14 */
15 public void printCollege() {
16 // 从 collegeList 取出所有学院,Java 中的 List 已经实现了Iterator接口
17 Iterator<College> iterator = collegeList.iterator();
18
19 while (iterator.hasNext()) {
20 //取出一个学院
21 College college = iterator.next();
22 System.out.println("========"+ college.getName() +"==========");
23 printDepartment(college.createIterator());
24 }
25
26 }
27
28 /**
29 * 输出学院下面的院系
30 */
31 public void printDepartment(Iterator iterator) {
32 while (iterator.hasNext()) {
33 Department dept = (Department)iterator.next();
34 System.out.println(dept.getDesc());
35 }
36 }
37 }
客户端:
1 public class Client {
2 public static void main(String[] args) {
3
4 //创建学院
5 List<College> colleges = new ArrayList<>();
6 colleges.add(new ComputerCollege());
7 colleges.add(new InfoCollege());
8
9 OutputImpl output = new OutputImpl(colleges);
10 output.printCollege();
11 }
12 }