Java设计模式之迭代器模式

Posted 此账户已注销或冻结

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java设计模式之迭代器模式相关的知识,希望对你有一定的参考价值。

概论

什么是迭代器模式?迭代器模式是提供一种方法访问一个容器对象中的各个元素,而又不需要暴露该对象的细节。

 

迭代器模式示例

迭代器模式中分为4种角色。

①抽象迭代器

②具体迭代器

③抽象容器

④具体容器

首先我们一个抽象迭代器,抽象迭代器中包含遍历到下一个元素、判断遍历是否已经到了尾部、删除当前指向的元素。

1 public interface Iterator {
2 
3     public Object next();
4     public boolean hasNext();
5     public boolean remove();
6 }

第3行,声明一个函数,获取下一个元素。

第4行,声明一个函数,判断是否还有下一个元素。

第5行,声明一个函数,删除元素。

 

我们再来新增一个具体的迭代器:源代码如下所示:

 1 public class DefaultIterator implements Iterator {
 2 
 3     private Vector vector = new Vector();
 4     public int cursor = 0;
 5 
 6     public DefaultIterator(Vector vector) {
 7         this.vector = vector;
 8     }
 9 
10     @Override
11     public Object next() {
12 
13         if(this.hasNext()) {
14             return this.vector.get(cursor++);
15         }
16         return null;
17     }
18 
19     @Override
20     public boolean hasNext() {
21         if(this.cursor == this.vector.size()) {
22             return false;
23         }
24         return true;
25     }
26 
27     @Override
28     public boolean remove() {
29         this.vector.remove(this.cursor);
30         return true;
31     }
32 }

第3行:声明成员属性Vector

第4行:声明成员属性Cursor

第6行:带参数构造函数,用于初始化。

 

我们自定义一个抽象的容器接口:包含新增元素,删除元素,获取迭代器。

1 public interface Collection {
2     public void add(Object object);
3     public void remove(Object object);
4     public Iterator iterator();
5 }

 

我们再定义一个具体的容器:

 1 public class DefaultIterator implements Iterator {
 2 
 3     private Vector vector = new Vector();
 4     public int cursor = 0;
 5 
 6     public DefaultIterator(Vector vector) {
 7         this.vector = vector;
 8     }
 9 
10     @Override
11     public Object next() {
12 
13         if(this.hasNext()) {
14             return this.vector.get(cursor++);
15         }
16         return null;
17     }
18 
19     @Override
20     public boolean hasNext() {
21         if(this.cursor == this.vector.size()) {
22             return false;
23         }
24         return true;
25     }
26 
27     @Override
28     public boolean remove() {
29         this.vector.remove(this.cursor);
30         return true;
31     }
32 }

最后我们增加一个场景类Client:代码如下图所示:

 1 public class Client {
 2 
 3     public static void main(String[] args) {
 4         Collection collection = new DefaultCollection();
 5         collection.add("111");
 6         collection.add("222");
 7         collection.add("333");
 8 
 9         Iterator iterator = collection.iterator();
10         while (iterator.hasNext()) {
11             System.out.println(iterator.next());
12         }
13     }
14 }

当然我们的容器存在是基于Vector,存储的形式有很多比如ArrayList,数组等等,当然不一定局限集合,比如缓存等。而迭代器模式在实际中往往不会自己去定义,而是直接采用Java提供的Iterator接口。

 

以上是关于Java设计模式之迭代器模式的主要内容,如果未能解决你的问题,请参考以下文章

Java 设计模式之迭代器学习与掌握

Java设计模式之迭代器模式

JAVA设计模式之迭代器设计模式

JAVA SCRIPT设计模式--行为型--设计模式之Iterator迭代器模式(16)

折腾Java设计模式之迭代器模式

设计模式之迭代器模式