單一職責:對象應該只負責一項任務。
所以,我們在開發自己的集合或者容器的時候,應該讓容器只負責保存對象,而遍歷出所有的對象,這個任務應該單獨出來,讓別的類的實現。很幸運,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