

/***
* @author shaofan
* @Description 迭代器模式完成学院部门遍历
*/
public class MyIterator {
public static void main(String[] args) {
ComputerCollege computerCollege = new ComputerCollege();
computerCollege.add(new Department("软件工程"));
computerCollege.add(new Department("计算机科学与技术"));
InfoCollege infoCollege = new InfoCollege(10);
infoCollege.add(new Department("信息工程"));
Output.output(computerCollege);
System.out.println();
Output.output(infoCollege);
}
}
class ComputerCollegeIterator implements Iterator<Department>{
List<Department> data;
int position;
public ComputerCollegeIterator(List<Department> data){
this.data = data;
position = 0;
}
@Override
public boolean hasNext() {
return position<data.size();
}
@Override
public Department next() {
return data.get(position++);
}
}
class InfoCollegeIterator implements Iterator<Department>{
Department[] data;
int position;
public InfoCollegeIterator(Department[] data){
this.data = data;
position = 0;
}
@Override
public boolean hasNext() {
return position<data.length;
}
@Override
public Department next() {
return data[position++];
}
}
class Department{
private String name;
public Department(String name){
this.name = name;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}
@Override
public String toString(){
return this.name;
}
}
abstract class College{
abstract Iterator<Department> createIterator();
}
class ComputerCollege extends College{
private List<Department> data;
public ComputerCollege(){
data = new ArrayList<>();
}
public void add(Department department){
data.add(department);
}
@Override
Iterator<Department> createIterator() {
return new ComputerCollegeIterator(data);
}
}
class InfoCollege extends College{
private Department[] data;
int index = 0;
public InfoCollege(int size){
data = new Department[size];
}
public void add(Department department){
data[index++] = department;
}
@Override
Iterator<Department> createIterator() {
return new InfoCollegeIterator(data);
}
}
class Output{
public static void output(College college){
Iterator<Department> it = college.createIterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
jdk的各个集合,都实现了各自的迭代器
ArrayList

LinkedList

对不同的数据结构,迭代器可以提供统一的遍历方式
优点