行为型模式-迭代器模式
2015-07-30 11:24
309 查看
迭代器模式
迭代模式又叫游标(cursor)模式,提供一种方法访问一个容器对象中各个元素,又不暴露该对象的内部细节。
迭代器模式角色
抽象迭代器(Iterator)角色:定义访问和遍历元素的接口;
具体迭代器(ConcreteIterator)角色:实现抽象迭代器,完成容器元素的遍历,同时要记录遍历中的当前位置及遍历对象的size;
抽象聚集(Aggregate)角色:提供创建迭代器的接口;
具体聚集(ConcreteAggregate)角色:该角色实现抽象聚集,创建出容纳迭代器的对象。
迭代器的优点
迭代器模式简化了访问容器元素的操作,具备一个统一的遍历接口;
封装遍历算法,使算法独立于聚集角色。客户无须知道聚集对象的类型,即使聚集对象的类型发生变化,也不会影响遍历过程。
缺点
迭代器模式给使用者一个序列号的错觉,从而产生错误
<span style="font-size:18px;">package iteratormodel;
public interface Iterator {
public Object next();
public boolean hasNext();
}
</span>
迭代模式又叫游标(cursor)模式,提供一种方法访问一个容器对象中各个元素,又不暴露该对象的内部细节。
迭代器模式角色
抽象迭代器(Iterator)角色:定义访问和遍历元素的接口;
具体迭代器(ConcreteIterator)角色:实现抽象迭代器,完成容器元素的遍历,同时要记录遍历中的当前位置及遍历对象的size;
抽象聚集(Aggregate)角色:提供创建迭代器的接口;
具体聚集(ConcreteAggregate)角色:该角色实现抽象聚集,创建出容纳迭代器的对象。
迭代器的优点
迭代器模式简化了访问容器元素的操作,具备一个统一的遍历接口;
封装遍历算法,使算法独立于聚集角色。客户无须知道聚集对象的类型,即使聚集对象的类型发生变化,也不会影响遍历过程。
缺点
迭代器模式给使用者一个序列号的错觉,从而产生错误
<span style="font-size:18px;">package iteratormodel;
public interface Iterator {
public Object next();
public boolean hasNext();
}
</span>
<span style="font-size:18px;">package iteratormodel; public class ConcreteIterator implements Iterator { //迭代器持有一个聚合对象,这样才能对聚合对象进行操作 private ConcreteAggregate agg; private int index = 0; private int size = 0; public ConcreteIterator(ConcreteAggregate agg) { // TODO Auto-generated constructor stub this.agg = agg; this.index = 0; this.size = agg.size(); } public Object next() { // TODO Auto-generated method stub if(index < size){ return agg.getElement(index++); }else{ return null; } } @Override public boolean hasNext() { // TODO Auto-generated method stub return index < size; } } </span>
<span style="font-size:18px;">package iteratormodel; public interface Aggregate { public void add(Object obj); public Iterator createIterator(); } </span>
<span style="font-size:18px;">package iteratormodel; import java.util.Vector; public class ConcreteAggregate implements Aggregate{ private Vector vector = new Vector(); public ConcreteAggregate() { // TODO Auto-generated constructor stub } public void add(Object obj) { vector.add(obj); } public Iterator createIterator() { // TODO Auto-generated method stub return new ConcreteIterator(this); } public int size(){ return vector.size(); } public Object getElement(int index){ if(index < vector.size()){ return vector.get(index); }else{ return null; } } } </span>
相关文章推荐
- Javascript事件冒泡机制
- JAVA和C++ 交换两个变量的值的函数 区别
- redis memory(还可以吧)
- get了fragment,
- linux下基于C语言的信号编程实例
- HDOJ 2199 Can you solve this equation?(二分)
- 从文本文件导入数据到hive表中
- 计算机视觉、机器学习、人工智能领域知识汇总
- 【Windows编程】系列第七篇:Menubar的创建和使用
- jQuery插件 -- Form表单插件jquery.form.js
- 【asp】ERR对象
- hdoj2199 Can you solve this equation?(二分)
- 序列化相关问题
- 二叉树的遍历方法
- Protobuf简单使用及其抓包分析
- laravel陌生知识点快速学习(三)
- laravel陌生知识点快速学习(四)
- PowerShell针对SCVMM批量导出模板的描述信息以及导入
- keepalived:Keepalived的作用是检测web服务器的状态
- PowerShell针对SCVMM批量导出模板的描述信息以及导入