编写程序展示一个学校院系结构:需求是这样,要在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系。如图
对原理类图的说明-即(迭代器模式的角色及职责)
编写程序展示一个学校院系结构:需求是这样,要在一个页面中展示出学校的院系组成,一个学校有多个学院,一个学院有多个系。
package com.flower.iterator;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
public class TestMain {
public static void main(String[] args) {
List<College> colleges = Arrays.asList(new ComputerCollege(), new InfoCollege());
OutputImpl output = new OutputImpl(colleges);
output.printCollege();
}
}
class Dept{
public String name;
public String desc;
@Override
public String toString() {
return "Dept{" +
"name='" + name + '\'' +
", desc='" + desc + '\'' +
'}';
}
}
class ComputerCollegeIterator implements Iterator<Dept>{
public Dept[] depts;
public int position = 0;
public ComputerCollegeIterator(Dept[] depts) {
this.depts = depts;
}
@Override
public boolean hasNext() {
return position < depts.length && depts[position] != null;
}
@Override
public Dept next() {
return depts[position++];
}
@Override
public void remove() {
depts[position] = null;
}
}
class InfoCollegeIterator implements Iterator<Dept>{
public List<Dept> depts;
public int position = 0;
public InfoCollegeIterator(List<Dept> depts) {
this.depts = depts;
}
@Override
public boolean hasNext() {
return position < depts.size() && depts.get(position) != null;
}
@Override
public Dept next() {
return depts.get(position++);
}
@Override
public void remove() {
depts.remove(position);
}
}
interface College{
String getName();
void addDept(String name,String desc);
Iterator<Dept> createIterator();
}
class ComputerCollege implements College{
public Dept[] depts;
public int index = 0;
public ComputerCollege() {
depts = new Dept[3];
addDept("计算机1","计算机1");
addDept("计算机2","计算机2");
addDept("计算机3","计算机3");
}
@Override
public String getName() {
return "计算机学院";
}
@Override
public void addDept(String name, String desc) {
Dept dept = new Dept();
dept.name = name;
dept.desc = desc;
depts[index++] = dept;
}
@Override
public Iterator<Dept> createIterator() {
return new ComputerCollegeIterator(depts);
}
}
class InfoCollege implements College{
public List<Dept> depts;
public int index = 0;
public InfoCollege() {
depts = new ArrayList<>(3);
addDept("信息1","信息1");
addDept("信息2","信息2");
addDept("信息3","信息3");
}
@Override
public String getName() {
return "信息工程学院";
}
@Override
public void addDept(String name, String desc) {
Dept dept = new Dept();
dept.name = name;
dept.desc = desc;
depts.add(dept);
}
@Override
public Iterator<Dept> createIterator() {
return new InfoCollegeIterator(depts);
}
}
class OutputImpl{
List<College> colleges;
public OutputImpl(List<College> colleges) {
this.colleges = colleges;
}
public void printCollege(){
colleges.forEach(college -> {
String name = college.getName();
System.out.println(name);
printDept(college.createIterator());
});
}
public void printDept(Iterator<Dept> iterator){
while (iterator.hasNext()){
Dept next = iterator.next();
System.out.println(next);
}
}
}
不用想都知道,坑定是List
对类图的角色分析和说明