设计模式之迭代器模式

什么是迭代器模式

提供一种方法访问容器对象中各个元素,而又不需要暴露该对象的内部细节。

迭代器模式提供的是遍历容器的一种方法,它单独管理容器的遍历任务,使遍历与容器自身任务分离开。然而,这种模式现在已经深入到jdk内部了,我们早已经不需要自己手动实现迭代器模式了,不过为了学习还是试着写一下。

举个栗子

迭代器模式的模型图

然后开始对各个角色开始编码

  • 抽象迭代器
1
2
3
4
5
public interface Iterator {
Object next();
boolean hasNext();
boolean remove();
}
  • 具体迭代器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class ConcreteIterator implements Iterator {
private Vector vector;
public int cursor = 0;
public ConcreteIterator(Vector vector) {
this.vector = vector;
}
@Override
public Object next() {
Object result = null;
if (hasNext()) {
result = vector.get(cursor++);
}
return result;
}
@Override
public boolean hasNext() {
return cursor != vector.size();
}
@Override
public boolean remove() {
vector.remove(cursor);
return true;
}
}
  • 抽象容器
1
2
3
4
5
public interface Aggregate {
void add(Object object);
void remove(Object object);
Iterator createIterator();
}
  • 具体容器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class ConcreteAggregate implements Aggregate {
private Vector vector = new Vector();

@Override
public void add(Object object) {
vector.add(object);
}

@Override
public void remove(Object object) {
vector.remove(object);
}

@Override
public Iterator createIterator() {
return new ConcreteIterator(vector);
}
}
  • 调用场景
1
2
3
4
5
6
7
8
9
10
11
12
public class Client {
public static void main(String[] args) {
Aggregate aggregate=new ConcreteAggregate();
aggregate.add("1");
aggregate.add("2");
aggregate.add("3");
Iterator iterator=aggregate.createIterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
}

以上就是自己手动实现迭代器的过程,我们会发现,jdk中早就已经有了这些实现了,我们很多时候只要直接使用就可以了。

适用范围

迭代器模式与集合容器分不开,他就是专门为了解决容器内元素迭代问题而产生的,为不同容器遍历提供了统一的接口。

优点缺点

迭代器模式的优点在于他简化了遍历方式,提供了统一的操作接口封装性良好,用户只需要得到迭代器就可以遍历,而对于遍历算法则不用去关心。

注意事项

在实际开发中不只是java,很多高级语言都提供了了常用容器的迭代器,迭代器模式作为一个早期的设计模式现在看来我们只要知道有这个东西就可以了。

-------------本文结束感谢您的阅读-------------
坚持原创技术分享,您的支持将鼓励我继续创作!