设计模式之迭代器模式
来源:互联网 发布:开发sql语句美化小工具 编辑:程序博客网 时间:2024/06/06 18:19
设计模式之迭代器模式
迭代器模式(ITerator Parttern)是目前已经没落的一个设计模式,定义如下:Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation.(它提供一种方法访问一个容器对象中的各个元素,而又不需要暴露该对象内部的细节)
通用类图
四个角色
1.Iterator抽象迭代器,抽象迭代器负责定义访问和遍历元素的接口,基本上有三个固定的方法:first()获取第一个元素,next()访问下一个元素,isDone()是否已经访问到底部;
2.ConcreteIterator具体迭代器,具体迭代器角色实现迭代器接口,完成容器元素的遍历;
3.Aggregate抽象容器,容器角色负责提供创建具体迭代器角色的接口,必然有一个类似createIterator()这样的方法;
4.ConcreteAggregate具体容器,具体容器实现容器接口定义的方法,创建出容纳迭代器的对象。
通用源码
抽象迭代器
public interface Iterator {public Object next();public boolean hasNext();public boolean remove();}
具体迭代器
public class ConcreteIterator implements Iterator{private Vector vector=new Vector();public int cursor=0;public ConcreteIterator(Vector _vector){this.vector=_vector;}public boolean hasNext(){if(this.cursor==this.vector.size()){return false;}else{return true;}}public Object next(){Object result=null;if(this.hasNext()){return this.vector.get(this.cursor++);}else{result=null;}return result;}public boolean remove(){this.vector.remove(this.cursor);return true;}}
抽象容器public interface Aggregate {public void add(Object object);public void remove(Object object);public Iterator iterator();}
具体容器
public class ConcreteAggregate implements Aggregate{private Vector vector=new Vector();public void add(Object object){this.vector.add(object);}public Iterator iterator(){return new ConcreteIterator(this.vector);}public void remove(Object object){this.remove(object);}}
场景类
public class Client {public static void main(String[] args) {// TODO Auto-generated method stubAggregate agg=new ConcreteAggregate();agg.add("abc");agg.add("aaa");agg.add("1234");Iterator iterator=agg.iterator();while(iterator.hasNext()){System.out.println(iterator.next());}}}
例子:整理项目信息
项目信息接口
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(){}public 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{private ArrayList<IProject> projectList=new ArrayList<IProject>();private int currentItem=0;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 Client {public static void main(String[] args) {// TODO Auto-generated method stubIProject project=new Project();project.add("星球大战项目", 10, 100000);project.add("扭转时空项目", 100, 1000000);project.add("超人改造项目", 1000, 1000000);for(int i=0;i<104;++i){project.add("第"+i+"个项目", i*5, i*10000);}IProjectIterator projectIterator=project.iterator();while(projectIterator.hasNext()){IProject p=(IProject)projectIterator.next();System.out.println(p.getProjectInfo());}}}
0 0
- 设计模式之迭代器模式
- 设计模式之 迭代器模式
- 设计模式之迭代器模式
- 设计模式之迭代器模式
- 设计模式之--迭代器模式
- 设计模式之迭代器模式
- 设计模式之迭代器模式
- 设计模式之迭代器模式
- 设计模式之-迭代器模式
- 设计模式之迭代器模式
- 设计模式之迭代器模式
- 设计模式之迭代器模式
- 设计模式之迭代器模式
- 设计模式之迭代器模式
- 设计模式 之 迭代器模式
- 设计模式 之 迭代器模式
- 设计模式之迭代器模式
- 设计模式之迭代器模式
- 五大常用算法(五)分支限界法
- 泛型中的extends和super的区别
- Elasticsearch 字段数据类型
- 575
- 基于vue、vuex、vue-router、echarts搭建的数据展示平台
- 设计模式之迭代器模式
- 汇编程序:批量复制并显示字符
- java程序员开发参考资源
- 通过Spring Data Neo4J操作您的图形数据库
- 公司服务器被攻击,tomcat不停的响应,日志不停的刷,iptables配置后解决
- Python项目开发实战1
- Maven生成可以直接运行的jar包的多种方式
- 百度搜索引擎工作原理
- VS生成解决方案成功,运行页面时提示:[3000]尝试读取或写入受保护的内存。这通常指示其他内存已损坏。