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接口。

原文地址:https://www.cnblogs.com/sunshine798798/p/10115828.html

时间: 2024-10-15 08:32:35

Java设计模式之迭代器模式的相关文章

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

迭代器模式 Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation. 提供一种不公示其底层细节(结构)的情况下能顺序访问聚合对象元素的方法. 其实在java体系中,jdk已经引入了迭代器接口以及对于的容器接口等.就拿迭代器中的角色,在java中找出其对应的类. 具体角色 (1)迭代器角色(Iterator):定义遍

JAVA设计模式之 迭代器模式【Iterator Pattern】

一.概述 提供一种方法来访问聚合对象(容器container),而不用暴露这个对象的内部细节. 二.适用场景 1>遍历访问聚合对象中的元素,而无须暴露它的内容表示,将聚合对象的访问和内部数据的存储分离.使得访问聚合对象时无须了解其内部的实现细节. 2>需要为一个聚合对象提供多种遍历实现. 三.UML类图 四.参与者 1>Iterator(抽象迭代器):它定义了访问和遍历元素的接口,声明了用于遍历数据元素的方法,例如:用于获取第一个元素的first()方法,用于访问下一个元素的next()

浅谈JAVA设计模式之——迭代器模式(interator)

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/45599951 一.概述 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. 二.适用性 1.访问一个聚合对象的内容而无需暴露它的内部表示. 2.支持对聚合对象的多种遍历. 3.为遍历不同的聚合结构提供一个统一的接口(即,支持多态迭代). 三.参与者 1.Iterator 迭代器定义访问和遍历元素的接口. 2.ConcreteItera

java设计模式_迭代器模式

/**  * @Title: Aggregate.java  * @Package com.wangbiao.design  * @Description: TODO   * @author wangbiao     * @date 2014-9-20 下午05:02:00   * @version V1.0  */ package com.wangbiao.design.iterator; import java.io.ObjectInputStream.GetField; import ja

Java 设计模式 之 迭代器模式

http://www.verejava.com/?id=16999127808571 package com.iterator.theory; import java.util.Arrays; public class TestIterator { public static void main(String[] args) { List list=new ArrayList(); list.add("李阳"); list.add("王涛"); list.add(&

java设计模式--行为型模式--迭代模式

1 迭代器模式 2 概述 3 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. 4 5 6 适用性 7 1.访问一个聚合对象的内容而无需暴露它的内部表示. 8 9 2.支持对聚合对象的多种遍历. 10 11 3.为遍历不同的聚合结构提供一个统一的接口(即,支持多态迭代). 12 13 14 参与者 15 1.Iterator 16 迭代器定义访问和遍历元素的接口. 17 18 2.ConcreteIterator 19 具体迭代器实现迭代器接口.

设计模式之迭代器模式(Iterator)

1.定义 迭代器模式提供一种方法访问一个容器对象中的各个元素,而又不需暴露该对象的内部细节. 基本上没有人会单独写一个迭代器,除非是产品性质的开发. 2.通用类图 Iterator抽象迭代器:抽象迭代器负责定义访问和遍历元素的接口,而且基本上是有固定的3个方法:first()获得第一个元素:next()访问下一个元素:isDone()是否已经访问到底部(Java 叫做hasNext()方法). ConcreteIterator具体迭代器:具体迭代器角色要实现迭代器接口,完成容器元素的遍历. Ag

2018.4.30 设计模式之迭代器模式

设计模式之迭代器模式 1.定义/概念 迭代器模式是Java和.Net编程环境中非常常用的设计模式.这种设计模式用于顺序访问集合对象的元素要知道集合对象的底层表示.迭代器模式属于行为型模式 迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示. 2.角色和定义 ● Iterator抽象迭代器 抽象迭代器负责定义访问和遍历元素的接口,而且基本上是有固定的3个方法:first()获得第一个元素,next()访问下一个元素,isDone()是否已经访问

Python进阶:设计模式之迭代器模式

在软件开发领域中,人们经常会用到这一个概念--"设计模式"(design pattern),它是一种针对软件设计的共性问题而提出的解决方案.在一本圣经级的书籍<设计模式:可复用面向对象软件的基础>(1991年,Design Patterns - Elements of Reusable Object-Oriented Software)中,它提出了23种设计模式.迭代器模式就是其中的一种,在各种编程语言中都得到了广泛的应用. 本文将谈谈 Python 中的迭代器模式,主要内