您的位置:首页 > 编程语言 > Java开发

Java设计模式之迭代器模式

2017-09-14 09:35 507 查看

迭代器模式(iterator)

概念:

提供一种一致的方法来顺序遍历一个容器中的所有元素

适用:

1.访问一个聚合对象的内容而无需暴露它的内部表示。

2.支持对聚合对象的多种遍历。

3.为遍历不同的聚合结构提供一个统一的接口(即,多态迭代)。

迭代器模式的优缺点

迭代器模式的优点:

简化了遍历方式,对于对象集合的遍历,还是比较麻烦的,对于数组或者有序列表,我们尚可以通过游标来取得,但用户需要在对集合了解很清楚的前提下,自行遍历对象,但是对于hash表来说,用户遍历起来就比较麻烦了。而引入了迭代器方法后,用户用起来就简单的多了。 可以提供多种遍历方式,比如说对有序列表,我们可以根据需要提供正序遍历,倒序遍历两种迭代器,用户用起来只需要得到我们实现好的迭代器,就可以方便的对集合进行遍历了。 封装性良好,用户只需要得到迭代器就可以遍历,而对于遍历算法则不用去关心。

迭代器模式的缺点: 对于比较简单的遍历(像数组或者有序列表),使用迭代器方式遍历较为繁琐,大家可能都有感觉,像ArrayList,我们宁可愿意使用for循环和get方法来遍历集合。



示例代码:

/**
* 迭代器接口
*/
public interface Iterator {
//前移
public Object previous();
//后移
public Object next();
public boolean hasNext();
//取得第一个元素
public Object first();
}


/**
* 聚集接口
*/
public interface Aggregate {
public Iterator CreateIterator();
/*取得集合元素*/
public Object get(int i);
/*取得集合大小*/
public int size();
}


/**
* 具体迭代器类
*/
public class ConcreteIterator implements Iterator {
private Aggregate collection;
private int pos = -1;
public ConcreteIterator(Aggregate collection){
this.collection = collection;
}
public Object previous() {
if(pos > 0){
pos--;
}
return collection.get(pos);
}
public Object next() {
if(pos<collection.size()-1){
pos++;
}
return collection.get(pos);
}
public boolean hasNext() {
if(pos<collection.size()-1){
return true;
}else{
return false;
}
}
public Object first() {
pos = 0;
return collection.get(pos);
}
}


/**
* 具体聚集类
*/
public class ConcreteAggregate implements Aggregate {
public String string[] = {"A","B","C","D","E"};
public Iterator CreateIterator() {
return new ConcreteIterator(this);  // 把数组传进
}
public Object get(int i) {
return string[i];
}
public int size() {
return string.length;
}
}


/**
* 迭代器模式的测试
* 实现 :遍历集合
*/
public class Test {
public static void main(String[] args) {
Aggregate aggregate = new ConcreteAggregate();
Iterator it = aggregate.CreateIterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: