|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
迭代器模式有叫做游标(Cursor)模式。GOF给出的定义:提供一种方法访问一个容器(container)对象中的各个元素,而又不暴露该对象的内部细节。
迭代器模式由以下角色组成:
迭代器角色(Iterator): 负责定义访问和遍历元素的接口。
具体迭代器角色(Concrete Iterator):实现迭代器接口,并要记录遍历中的当前位置。
容器角色(Container): 负责提供创建具体迭代器角色的接口。
具体容器角色(Concrete Container):实现创建具体迭代器角色的接口, 这个具体迭代器角色与该容器的结构相关。
看一个这个例子的类图:
首先我们得需要连个接口:
- public interface IProject
- {
- //增加项目
- public void add(String name, int num, int cost);
- //从老板这里看到的就是项目信息
- public String getProjectInfo();
- //获得一个可以遍历的对象
- public IProjectIterator iterator();
- }
复制代码- import java.util.Iterator;
- public interface IProjectIterator extends Iterator
- {
- }
复制代码
然后是实现这两个接口的两个类:
- import java.util.ArrayList;
- 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);
- }
- }
复制代码- import java.util.ArrayList;
- 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());
- }
- }
- }
复制代码
效果:
|
|