迭代器模式---學習筆記

單一職責:對象應該只負責一項任務。

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


發佈了66 篇原創文章 · 獲贊 7 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章