迭代器模式
已经过时了,随便看看吧,下面的代码都是复制过来的。
定义:
提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。
举例:
未修改前的代码:
public interface IProject { //从老板这里看到的就是项目信息 public String getProjectInfo(); } public class Project implements IProject { //项目名称 private String name = ""; //项目成员数量 private int num = 0; //项目费用 private int cost = 0; //定义一个构造函数,把所有老板需要看到的信息存储起来 public Project(String name,int num,int cost){ //赋值到类的成员变量中 this.name = name; this.num = num; this.cost=cost; } //得到项目的信息 public String getProjectInfo() { String info = ""; //获得项目的名称 info = info+ "项目名称是:" + this.name; //获得项目人数 info = info + "\t项目人数: "+ this.num; //项目费用 info = info+ "\t 项目费用:"+ this.cost; return info; } } public class Boss { public static void main(String[] args) { //定义一个List,存放所有的项目对象 ArrayList<IProject> projectList = new ArrayList<IProject>(); //增加星球大战项目 projectList.add(new Project("星球大战项目",10,100000)); //增加扭转时空项目 projectList.add(new Project("扭转时空项目",100,10000000)); //增加超人改造项目 projectList.add(new Project("超人改造项目",10000,1000000000)); //这边100个项目 for(int i=4;i<104;i++){ projectList.add(new Project("第"+i+"个项目",i*5,i*1000000)); } //遍历一下ArrayList,把所有的数据都取出 for(IProject project:projectList){ System.out.println(project.getProjectInfo()); } } }
修改之后的代码:
public interface IProject { //增加项目 public void add(String name,int num,int cost); //从老板这里看到的就是项目信息 public String getProjectInfo(); //获得一个可以被遍历的对象 public IProjectIterator iterator(); } public class Project implements IProject { //定义一个项目列表,说有的项目都放在这里 private ArrayList<IProject> projectList = new ArrayList<IProject>(); //项目名称 private String name = ""; //项目成员数量 private int num = 0; //项目费用 private int cost = 0; public Project(){} //定义一个构造函数,把所有老板需要看到的信息存储起来 private Project(String name,int num,int cost){ //赋值到类的成员变量中 this.name = name; this.num = num; this.cost=cost; } //增加项目 public void add(String name,int num,int cost){ this.projectList.add(new Project(name,num,cost)); } //得到项目的信息 public String getProjectInfo() { String info = ""; //获得项目的名称 info = info+ "项目名称是:" + this.name; //获得项目人数 info = info + "\t项目人数: "+ this.num; //项目费用 info = info+ "\t 项目费用:"+ this.cost; return info; } //产生一个遍历对象 public IProjectIterator iterator(){ return new ProjectIterator(this.projectList); } } public interface IProjectIterator extends Iterator { } public class ProjectIterator implements IProjectIterator { //所有的项目都放在这里ArrayList中 private ArrayList<IProject> projectList = new ArrayList<IProject>(); private int currentItem = 0; //构造函数传入projectList public ProjectIterator(ArrayList<IProject> projectList){ this.projectList = projectList; } //判断是否还有元素,必须实现 public boolean hasNext() { //定义一个返回值 boolean b = true; if(this.currentItem>=projectList.size() || this.projectList.get(this.currentItem) == null){ b =false; } return b; } //取得下一个值 public IProject next() { return (IProject)this.projectList.get(this.currentItem++); } //删除一个对象 public void remove() { //暂时没有使用到 } } public class Boss { public static void main(String[] args) { //定义一个List,存放所有的项目对象 IProject project = new Project(); //增加星球大战项目 project.add("星球大战项目ddddd",10,100000); //增加扭转时空项目 project.add("扭转时空项目",100,10000000); //增加超人改造项目 project.add("超人改造项目",10000,1000000000); //这边100个项目 for(int i=4;i<104;i++){ project.add("第"+i+"个项目",i*5,i*1000000); } //遍历一下ArrayList,把所有的数据都取出 IProjectIterator projectIterator = project.iterator(); while(projectIterator.hasNext()){ IProject p = (IProject)projectIterator.next(); System.out.println(p.getProjectInfo()); } } }
总结:
基本上很少有项目再独立写迭代器了,直接使用 List 或者 Map 就可以完整的解决问题。