public interface College {
String getName();
void addDepartment(String name,String desc);
Iterator createIterator();
}
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 class ComputerCollegeIterator implements Iterator {
Department[] departments;
int cursor;
public ComputerCollegeIterator(Department[] departments) {
this.departments = departments;
}
@Override
public boolean hasNext() {
return cursor<departments.length&&departments[cursor]!=null;
}
@Override
public Object next() {
Department department = departments[cursor];
cursor++;
return department;
}
}
public class ComputerCollege implements College{
Department[] departments;
int i=0;
public ComputerCollege() {
departments=new Department[3];
addDepartment("计算机科学与技术","计算机科学与技术");
addDepartment("电子科学与技术","电子科学与技术");
addDepartment("信息与通信工程","信息与通信工程");
}
@Override
public String getName() {
return "计算机学院";
}
@Override
public void addDepartment(String name, String desc) {
Department department=new Department(name,desc);
departments[i]=department;
i++;
}
@Override
public Iterator createIterator() {
return new ComputerCollegeIterator(departments);
}
}
public class OutputImpl {
List<College> colleges;
public OutputImpl(List<College> colleges) {
this.colleges = colleges;
}
/**
* 遍历所有的学院,并依次输出
*/
public void printCollege(){
Iterator<College> iterator = colleges.iterator();
while (iterator.hasNext()){
// 取出一个学院
College college = iterator.next();
System.out.println("学院:" + college.getName());
printDepartment(college.createIterator());
}
}
/**
* 输出专业
* @param iterator
*/
private void printDepartment(Iterator iterator) {
while (iterator.hasNext()){
Department department = (Department) iterator.next();
System.out.println("该学院下的专业有:" + department.getName());
}
}
public class Test {
public static void main(String[] args) {
List<College> colleges = new ArrayList<>(2);
colleges.add(new ComputerCollege());
OutputImpl output = new OutputImpl(colleges);
output.printCollege();
}
}