迭代器模式
一、题目:
某教务管理信息系统中,一个班级(class)包含多个学生(Stedent),使用java内置迭代器实现对学生数据的双向遍历,要求按学生年龄由大到小的次序输出学生信息,现使用迭代器模式设计系统。
(1)绘制迭代器模式结构视图
(2)给出实例类图并实现代码。
二、所用模式结构视图:
三、实例类图:
四、实例实现代码:
(因为区分,所以在类的前面加了Gj19)
学生类:
package gjIteratorPattern;
public class Gj19Student implements Comparable<Gj19Student>{
private String name;
private int age;
public Gj19Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
public int compareTo(Gj19Student stu){
if(this.age > stu.age){
return -1;
}else if(this.age < stu.age){
return 1;
}
return 0;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Java内置迭代器
package gjIteratorPattern;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
public class Gj19JavaIterator {
List<Gj19Student> slist=null;
public Gj19JavaIterator(){
Gj19Student[] stu=new Gj19Student[5];
slist=new ArrayList<Gj19Student>();
stu[0]=new Gj19Student("张三", 32);
stu[1]=new Gj19Student("李四", 25);
stu[2]=new Gj19Student("王五", 21);
stu[3]=new Gj19Student("赵六", 38);
stu[4]=new Gj19Student("周七", 26);
for(int i=0;i<5;i++){
slist.add(stu[i]);
}
}
public void display(){
Iterator<Gj19Student> t=slist.iterator();
System.out.println("遍历获得的原始数据:");
while(t.hasNext()){
Gj19Student student=t.next();
System.out.println("姓名:"+student.getName()+"今年"+student.getAge()+"岁");
}
Collections.sort(slist);
Iterator<Gj19Student> it=slist.iterator();
System.out.println("========================================");
System.out.println("按年龄从大到小排序:");
while(it.hasNext()){
Gj19Student student=it.next();
System.out.println("姓名:"+student.getName()+"今年"+student.getAge()+"岁");
}
}
}
迭代器模式客户端
package gjIteratorPattern;
/**
* 迭代器模式客户端
* @author gong
*
*/
public class Gj19Client {
public static void main(String[] args) {
Gj19JavaIterator gj19JavaIterator= new Gj19JavaIterator();
gj19JavaIterator.display();
}
}
五、运行结果: