迭代器模式---学习笔记

单一职责:对象应该只负责一项任务。

所以,我们在开发自己的集合或者容器的时候,应该让容器只负责保存对象,而遍历出所有的对象,这个任务应该单独出来,让别的类的实现。很幸运,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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值