声明:
本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
import java.util.Arrays;
import java.util.List;
/**
* Iterator模式提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象内部表示
*
* 个人觉得,为了不暴露该对象内部表示,而额外地提供一组访问接口(通用的遍历接口)
* 具体来说,就是想办法在被遍历的对象里面提供一个获得Iterator的方法: Iterator iterator(){...}
* 然后利用这个Iterator去遍历
* Iterator里面实现了通用的遍历方法:first(),next(),isDone(),currItem()
*
* 书上还提到一个很实用的例子,就是迭代器实现翻页
*/
interface Iterator {
void first();
void next();
boolean isDone();
Object currItem();
}
abstract class Aggregate {
public abstract Iterator iterator();
}
//需要用迭代器遍历的对象
class ArrayAggregate extends Aggregate {
private String[] data;
public ArrayAggregate(String[] data) {
this.data = data;
}
@Override
public Iterator iterator() {
return new ArrayIterator(this);
}
public Object get(int index) {
Object item = null;
if (index < data.length) {
item = data[index];
}
return item;
}
public int size() {
return data.length;
}
}
//需要用迭代器遍历的对象
class ListAggregate extends Aggregate {
private List<String> data;
public ListAggregate(List<String> data) {
this.data = data;
}
@Override
public Iterator iterator() {
return new ListIterator(this);
}
public int size() {
return data.size();
}
public Object get(int index) {
Object item = null;
if (index < data.size()) {
item = data.get(index);
}
return item;
}
}
class ArrayIterator implements Iterator {
private int index;
/* 如果是带迭代策略的Iterator,那ArrayIterator持有的就不是整个ArrayAggregate,
* 而是
1.ArrayAggregate过滤后的部分数据(例如只允许访问第一条记录),
可在构造函数里过滤:
private String[] dataAfterFilter;
public ArrayIterator(ArrayAggregate aggregate) {
dataAfterFilter =new String[]{(String) aggregate.get(0)};
}
2.从数据库取指定数量的指定记录(翻页)
3.等等
*/
private ArrayAggregate aggregate;
public ArrayIterator(ArrayAggregate aggregate) {
this.aggregate = aggregate;
}
//first(),next(),isDone(),currItem()这些方法,最终还是调用被遍历的对象的方法来实现
public void first() {
index = 0;
}
public void next() {
if (index < aggregate.size()) {
index++;
}
}
public boolean isDone() {
return index == aggregate.size();
}
public Object currItem() {
return aggregate.get(index);
}
}
class ListIterator implements Iterator {
private ListAggregate aggregate;
private int index;
public ListIterator(ListAggregate aggregate) {
this.aggregate = aggregate;
}
public void first() {
index = 0;
}
public void next() {
if (index < aggregate.size()) {
index++;
}
}
public boolean isDone() {
return index == aggregate.size();
}
public Object currItem() {
return aggregate.get(index);
}
}
public class IteratorPattern {
public static void main(String[] args) {
String[] array = { "aa", "bb", "cc" };
ArrayAggregate aggregate2 = new ArrayAggregate(array);
Iterator iterator2 = aggregate2.iterator();
visit(iterator2);
List<String> list = Arrays.asList(array); // asList返回的是一个不可修改的List,只供遍历
ListAggregate aggregate = new ListAggregate(list);
Iterator iterator = aggregate.iterator();
visit(iterator);
}
public static void visit(Iterator iterator) {
iterator.first();
while (!iterator.isDone()) {
Object obj = iterator.currItem();
System.out.println(obj);
iterator.next();
}
}
}
分享到:
相关推荐
迭代器模式是一种行为设计模式,它提供了一种方法来顺序访问聚合对象的元素,而无需暴露其底层表示。在本文中,我们将深入探讨迭代器模式的概念,并通过Python和C++两种编程语言展示其实现。 首先,理解迭代器模式...
第14章 迭代器模式(Iterator) 第15章 组合模式(Composite) 第16章 模板方法模式(Template Method) 第17章 策略模式(Strategy) 第18章 状态模式(State) 第19章 备忘录模式(Memento) 第20章 享元模式...
第14章 迭代器模式(Iterator) 第15章 组合模式(Composite) 第16章 模板方法模式(Template Method) 第17章 策略模式(Strategy) 第18章 状态模式(State) 第19章 备忘录模式(Memento) 第20章 享元模式...
第14章 迭代器模式(Iterator) 第15章 组合模式(Composite) 第16章 模板方法模式(Template Method) 第17章 策略模式(Strategy) 第18章 状态模式(State) 第19章 备忘录模式(Memento) 第20章 享元模式...
迭代器模式是软件设计模式中的一种行为模式,它在C#等面向对象编程语言中有着广泛的应用。这个模式的主要目标是允许用户遍历一个聚合对象(如数组、集合或列表)的所有元素,而无需了解底层的实现细节。下面将详细...
这个“iterator-demo”应该是一个示例项目,用于演示如何在实际编程中应用迭代器模式。下面我们将深入探讨迭代器模式及其在IT领域的应用。 迭代器模式的核心思想是为集合类提供一种统一的访问方式,使得客户代码...
迭代器模式是一种行为设计模式,它允许我们顺序访问聚合对象的元素,而无需暴露其底层表示。在Java中,迭代器模式广泛应用于集合框架,如ArrayList、LinkedList等。本示例将深入探讨如何在Java中实现和使用迭代器...
迭代器模式是一种行为设计模式,它提供了一种方法来顺序访问聚合对象的元素,而无需暴露其底层表示。这种模式允许我们遍历集合中的每个元素,同时保持集合本身抽象,不需了解其内部结构。 在Java、C#等面向对象语言...
C#面向对象设计模式 (行为型模式) Iterator 迭代器模式 视频讲座下载
迭代器模式(Iterator Pattern)是Java设计模式中的行为模式之一,它提供了一种方法来顺序访问聚合对象的元素,而又不暴露其底层表示。在Java中,迭代器模式被广泛应用于集合类,如ArrayList、LinkedList等,通过...
迭代器模式是软件设计模式中的行为模式之一,它提供了一种方法来顺序访问聚合对象的元素,而又不暴露其底层表示。在Java编程语言中,迭代器模式的应用尤为广泛,尤其是在处理集合类如ArrayList、LinkedList等时。这...
迭代器模式是软件设计模式中的一种行为模式,它在编程中扮演着重要的角色,尤其是在处理集合数据时。迭代器模式的核心思想是提供一种方法来顺序访问聚合对象的元素,而无需暴露其底层表示。这种模式使得用户可以在不...
迭代器模式提供了一种方法顺序访问一个聚合对象(理解为集合对象)中各个元素,而又无需暴露该对象的内部表示,这样既可以做到不暴露集合的内部结构,又可让外部代码透明地访问集合内部的数据。 3. 迭代器模式的...
本文将基于“C++设计模式课件21_Iterator_迭代器.pdf”的内容,详细介绍迭代器模式的基本概念、实现方式以及应用场景,并结合C++语言特性进行深入探讨。 #### 二、迭代器模式定义 迭代器模式(Iterator Pattern)...
迭代器模式是软件设计模式中的一种行为模式,它在Android开发中被广泛应用,尤其是在处理集合对象的遍历操作时。这种模式提供了一种方法来顺序访问聚合对象的元素,而又不暴露其底层表示。在Java或Android编程中,...
迭代器模式是软件设计模式中的一种行为模式,其主要目的是为了在不暴露聚合对象内部结构的情况下,提供一种顺序访问聚合对象中各个元素的方式。在Java中,迭代器模式被广泛应用于集合类,如ArrayList、LinkedList等...
Java 迭代器模式 Java 迭代器模式是一种行为设计模式,它提供了一种访问集合对象元素的方法,而不需要...迭代器模式是一种非常有用的设计模式,它可以帮助开发者更方便地遍历集合对象,并提高代码的可维护性和可读性。
- 迭代器模式(Iterator):提供一种方法顺序访问聚合对象的元素,而又不暴露其底层表示。 - 中介者模式(Mediator):用一个中介对象来封装一系列的对象交互。 - 备忘录模式(Memento):在不破坏封装性的前提下...
总结来说,这个“设计模式-实例代码”的资源很可能提供了关于迭代器模式以及其他设计模式的实现,这对于学习和应用设计模式的开发者来说是一份宝贵的参考资料。通过研究这些代码,我们可以加深对设计模式的理解,...