解决问题的“第三者”-迭代器模式
模式定义
提供一种方法顺序访问一个容器对象中的各个元素,而又不需要暴露该对象的内部表示
使用场景
遍历一个容器对象时
简单实现
具体迭代器类(实现迭代器接口-Iterator)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
package IteratorMode;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class ConcreteIterator<T> implements Iterator<T> {
private List<T> list=new ArrayList<T>();
private int cursor=0;
public ConcreteIterator(List<T> list) {
this.list = list;
}
public boolean hasNext() {
return cursor!=list.size();
}
public T next() {
T obj=null;
if(this.hasNext()){
obj=this.list.get(cursor++);
}
return obj;
}
public void remove() {
}
}
|
容器接口
1
2
3
4
5
6
7
8
9
10
11
12
|
package IteratorMode;
import java.util.Iterator;
public interface Aggregate<T> {
//添加一个元素
void add(T obj);
//移除一个元素
void remove(T obj);
//获取迭代器对象
Iterator<T> iterator();
}
|
具体容器类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
package IteratorMode;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class ConcreteAggregate<T> implements Aggregate<T> {
public List<T> list=new ArrayList<T>();
public void add(T obj) {
list.add(obj);
}
public void remove(T obj) {
list.remove(obj);
}
public Iterator<T> iterator() {
return new ConcreteIterator<T>(list);
}
}
|
客户类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
package IteratorMode;
import java.util.Iterator;
public class Client {
public static void main(String[] args) {
Aggregate<String> a=new ConcreteAggregate<String>();
a.add("Aige");
a.add("Studio/n");
a.add("SM");
a.add(" Brother");
Iterator iterator=a.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
}
|
执行结果
总结
优点:
支持以不同方式去遍历一个容器对象,也可以有多个遍历,弱化了容器类与遍历算法之间的关系
缺点:
对类文件的增加
了解即可,应用比较少,基本都有相应的内置实现