单一职责:对象应该只负责一项任务。
所以,我们在开发自己的集合或者容器的时候,应该让容器只负责保存对象,而遍历出所有的对象,这个任务应该单独出来,让别的类的实现。很幸运,Java的容器或者集合,已经帮我们实现了这些东西。下面我们就来看看迭代器模式是怎么一个实现方式。
1:定义一个产品类(一看就懂)
public class Project {
private String project_Name;
private int staff_Num;
private int cost;
public Project(String project_Name, int staff_Num, int cost) {
super();
this.project_Name = project_Name;
this.staff_Num = staff_Num;
this.cost = cost;
}
public String get_Info(){
String info="";
info+="项目名称:"+this.project_Name;
info+="\t项目人数:"+this.staff_Num;
info+="\t 项目费用:"+this.cost;
return info;
}
}
2:定义一个装产品容器的接口
public interface I_ProjectList {
//添加项目
public void add(String project_Name,int staff_Num,int cost);
//获得一个可以遍历的对象
public I_ProjectIterator iterator();
}
3:定义一个装产品容器的实现
public class ProjectList implements I_ProjectList{
//定义一个项目列表,说有的项目都放在这里
private List<Project> list=new ArrayList<Project>();
@Override
//添加项目
public void add(String project_Name, int staff_Num, int cost) {
this.list.add(new Project(project_Name, staff_Num, cost));
}
@Override
//得到便遍历器
public I_ProjectIterator iterator() {
return new ProjectIterator(this.list);
}
}
4:定义一个迭代器的接口
public interface I_ProjectIterator {
public boolean hasNext();
public Object next();
}
5:定一个迭代器的实现
public class ProjectIterator implements I_ProjectIterator {
private List<Project> list;
private int currentItem=0;
public ProjectIterator(List<Project> list) {
this.list=list;
}
@Override
public boolean hasNext() {
boolean flag=true;
if(this.currentItem>=this.list.size()||
this.list.get(currentItem)==null){
flag=false;
}
return flag;
}
@Override
//取得下一个的值
public Project next() {
return (Project)this.list.get(this.currentItem++);
}
}
6:现在老板要查看所有的项目信息,我们将这些信息反馈个他
public class Boss {
public static void main(String[] args) {
ProjectList projectList=new ProjectList();
projectList.add("宇宙开发项目", 10, 10000);
projectList.add("移动游戏项目", 100, 10000);
projectList.add("房地产开发项目", 200, 2000000);
I_ProjectIterator it= projectList.iterator();
while(it.hasNext()){
Project project=(Project) it.next();
System.out.println(project.get_Info());
}
}
}
项目名称:宇宙开发项目 项目人数:10 项目费用:10000
项目名称:移动游戏项目 项目人数:100 项目费用:10000
项目名称:房地产开发项目 项目人数:200 项目费用:2000000